【问题标题】:How to update inner most nested key in mongoDB如何更新mongoDB中最嵌套的键
【发布时间】:2021-09-24 16:20:26
【问题描述】:

我有一份文件如下:

文档 1:

{ 
    "ARCM Sum" : {
        "MCA Go" : "60", 
        "Assess" : "5030", 
        "ActivitID" : "467144" 
        "Activity Checks" : [
            {
                "Frequency within Activity Description matches Activity Frequency" : "Exception", 
                "Activity Description contains > 20 word" : "Pass"
            }
        ]
       
        "Week" : "04-05-2021", 
        "Load Datetime" : "07-14-2021"
    }
}

文档 2:

{ 
    "ARCM Sum" : {
        "MCA Go" : "60", 
        "Assess" : "5030", 
        "ActivitID" : "467144" 
        "Activity Checks" : [
            {
                "Frequency within Activity Description matches Activity Frequency" : "Exception", 
                "Activity Description contains > 20 words" : "Pass"
            }
        ]
       
        "Week" : "04-05-2021", 
        "Load Datetime" : "07-14-2021"
    }
}

我需要在“Activity Description contains > 20 word”中将文档从“word”更新为“words”,所以

例如在文档 1 中有“Activity Description contains > 20 word”需要更新为“Activity Description contains > 20 words”

文档 2 将被忽略,因为它已经在“活动描述包含 > 20 个单词”中包含单词

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    通常你会使用$rename,但因为它是数组中的一个字段,所以你不能直接这样做。在这里,您可以使用带有聚合管道的更新,$maps 相关文档:

    这从 MongoDB 4.2 开始可用 Update with aggregation pipeline

    db.test.update(
      { "ARCM Sum.Activity Checks.Activity Description contains > 20 word": {"$exists": true} },
      [{
        "$set": {
          "ARCM Sum.Activity Checks": {
            "$map": {
              "input": "$ARCM Sum.Activity Checks",
              "in": {
                "Frequency within Activity Description matches Activity Frequency": "$$this.Frequency within Activity Description matches Activity Frequency",
                "Activity Description contains > 20 words": "$$this.Activity Description contains > 20 word"
              }
            }
          }
        }
      }],
      { multi: true }
    )
    

    【讨论】:

      猜你喜欢
      • 2019-06-08
      • 2021-01-23
      • 1970-01-01
      • 2015-02-19
      • 1970-01-01
      • 2011-05-06
      • 2010-11-11
      • 1970-01-01
      相关资源
      最近更新 更多