Mongo聚合未更新实际文档

时间:2020-06-20 04:48:25

标签: mongodb aggregation-framework aggregate

从下面的示例可以看出,当我进行聚合时,它会吐出 淘汰所需的结果,但实际结果并未得到替换。 有人可以告诉我如何保持总计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" }

1 个答案:

答案 0 :(得分:2)

聚集应该从集合中读取。您可以使用$out$merge阶段将输出写入另一个集合。

仅从v4.4开始(到2020年6月20日为止尚不可用),您可以使用$merge阶段将其输出到same collection

但是,从4.2版开始,您可以使用"updates with aggregation pipeline"。管道的语法相同,但是您只能使用选定的阶段。

您的查询可以翻译为:

db.demo95.updateMany({}, [ { "$addFields": { "Id" : { "$toObjectId": "$Id" } }} ])

有关更多信息,请参见updateMany with aggregation pipeline

如果您对updateMany有疑问,可以在另一个问题上由answer引用另一个@whoami

到目前为止,.updateMany()中的聚合管道尚不支持 许多客户甚至没有几个mongo shell版本-那时我的票证 他们通过使用.update()得到解决,如果不起作用,请尝试 使用update + { multi : true }