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