使用位置运算符更新嵌套数组对象

时间:2018-08-02 18:32:44

标签: mongodb

我的文档对象看起来像这样

{ 
   "_id" : ObjectId("5b62cfac2046e98de373399c"),
   "hindi" : {
    "confirmed" : false, 
    "assigned_to" : "xyz+4@abc.com", 
    "candidates" : [

            {
            "candidate_id" : "9262c520-9640-11e8-bfbf-292ac77d55f9", 
            "value" : "स्क्रॉल कैसे करें ?", 
            "createdAt" : NumberInt(1533207154), 
            "createdBy" : "xyz+4@abc.com", 
            "warningList" : [], 
            "comments" : [
                "Correction कैसे स्क्रॉल करें", 
                "added ?"
            ]
           }, 
           {
            "candidate_id" : "297bb060-9642-11e8-ac2d-93ac27f5ee90", 
            "value" : "स्क्रॉल कैसे करें ?", 
            "createdAt" : NumberInt(1533207154), 
            "createdBy" : "xyz+4@abc.com", 
            "warningList" : [], 
            "comments" : [
                "Correction कैसे स्क्रॉल करें", 
                "added ?"
            ]
          }
    ]
}

我的目标是通过candidatescandidate_id数组中找到一个特定项目,并更新comment字段。

这是我正在尝试使用MongoDB positional operator($)的查询,但收到错误Unsupported projection option: $set: { hindi.candidates.$.comments: [] }

db.getCollection("strings").update({_id: ObjectId("5b62cfac2046e98de373399c"),"hindi.candidates.candidate_id": "297bb060-9642-11e8-ac2d-93ac27f5ee90"}, {$set :{"hindi.candidates.$.comments" : []}})

1 个答案:

答案 0 :(得分:1)

您需要在此处使用$elemMatch来匹配数组内部

db.getCollection("strings").update(
  {
    "_id": ObjectId("5b62cfac2046e98de373399c"),
    "hindi.candidates": { "$elemMatch": { "candidate_id": "297bb060-9642-11e8-ac2d-93ac27f5ee90" } }
  }, 
  { "$set": { "hindi.candidates.$.comments" : [] }}
)