Arj*_*ary 2 aggregate mongodb aggregation-framework
从下面的示例可以看出,当我进行聚合时,它会输出所需的结果,但实际结果没有被替换。有人可以告诉我如何保留聚合o/p吗?
> db.demo95.find();
{ "_id" : ObjectId("5eed924ae3fc5c755e1198a2"), "Id" : "5ab9cbe531c2ab715d42129a" }
> db.demo95.aggregate([ { "$addFields": { "Id" : { "$toObjectId": "$Id" } }} ])
{ "_id" : ObjectId("5eed924ae3fc5c755e1198a2"), "Id" : ObjectId("5ab9cbe531c2ab715d42129a") }
> db.demo95.find();
{ "_id" : ObjectId("5eed924ae3fc5c755e1198a2"), "Id" : "5ab9cbe531c2ab715d42129a" }
Run Code Online (Sandbox Code Playgroud)
聚合应该从集合中读取数据。您可以使用或阶段将输出写入另一个集合。$out$merge
仅从 v4.4 开始(截至 2020 年 6 月 20 日尚未普遍可用),您可以使用$mergestage 输出到同一个集合。
但是,从版本 4.2 开始,您可以使用“使用聚合管道更新”。管道的语法是相同的,但您只能使用选定的阶段。
您的查询可以翻译为:
db.demo95.updateMany({}, [ { "$addFields": { "Id" : { "$toObjectId": "$Id" } }} ])
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅带有聚合管道的 updateMany 。
如果您有疑问updateMany,可以参考@whoami在另一个问题上的另一个答案:
到目前为止,
.updateMany()许多客户端甚至很少的 mongo shell 版本都不支持聚合管道 - 当时我给他们的票通过使用解决了.update(),如果它不起作用,那么尝试使用update + { multi : true }。
| 归档时间: |
|
| 查看次数: |
2536 次 |
| 最近记录: |