【问题标题】:Mongo aggregate is not updating the actual documentMongo 聚合没有更新实际文档
【发布时间】:2020-10-10 09:18:16
【问题描述】:

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

【问题讨论】:

    标签: mongodb aggregation-framework aggregate


    【解决方案1】:

    Aggregate 应该读取集合中的数据。您可以使用$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 有任何疑问,您可以通过@whoami 就另一个问题参考另一个answer

    截至目前,.updateMany() 中的聚合管道不受支持 许多客户甚至很少的 mongo shell 版本 - 那时我的票 他们通过使用.update() 解决了,如果它不起作用,请尝试 使用update + { multi : true }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-23
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2021-09-23
      • 1970-01-01
      • 2015-11-05
      相关资源
      最近更新 更多