Mongo聚合没有更新实际文档

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)

tha*_*.ts 5

聚合应该从集合中读取数据。您可以使用或阶段将输出写入另一个集合$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 }