MongoDB shell语法错误问题



给定此文档:

{
  "_id": 0,
  "name": "Usman Shehu",
  "dp": "ol.jpg",
  "contacts": [
    {
      "id": 0,
      "name": "Ahmad Sani",
      "dp": "ol.jpg",
      "m": "Messages:12",
      "time": "01:27am",
      "chats": [
        {
          "msg": "hello there",
          "t": "12:45am",
          "des": "from"
        },
        {
          "msg": "how far...",
          "t": "12:47am",
          "des": "to"
        },
        {
          "msg": "so far so good",
          "t": "01:05pm",
          "des": "from"
        }
      ]
    }
  ]
}

如果我尝试运行此查询...

db.gist.update({"contacts.id":0},{$push:{chats:{"msg":"Test4","des":"from","t":"06:38pm"}}})

。它不是更新"聊天"数组,而是将其添加为文档中的新字段。

请帮忙吗?

这将起作用:

db.gist.update({"contacts.id":0},{$push:{"contacts.$.chats":{"msg":"Test4","des":"from","t":"06:38pm"}}})

您必须为 $push 命令指定contacts.$.chat,因为contacts.chat是一个嵌套数组,您必须使用 position 运算符。

针对问题中提供的文档运行上述命令会生成以下更新的文档:

{
    "_id" : 0,
    "name" : "Usman Shehu",
    "dp" : "ol.jpg",
    "contacts" : [ 
        {
            "id" : 0,
            "name" : "Ahmad Sani",
            "dp" : "ol.jpg",
            "m" : "Messages:12",
            "time" : "01:27am",
            "chats" : [ 
                {
                    "msg" : "hello there",
                    "t" : "12:45am",
                    "des" : "from"
                }, 
                {
                    "msg" : "how far...",
                    "t" : "12:47am",
                    "des" : "to"
                }, 
                {
                    "msg" : "so far so good",
                    "t" : "01:05pm",
                    "des" : "from"
                }, 
                {
                    "msg" : "Test4",
                    "des" : "from",
                    "t" : "06:38pm"
                }
            ]
        }
    ]
}

注意:文档指出:

位置 $ 运算符充当更新查询文档的第一个匹配项的占位符。

您的更新查询文档 ( {"contacts.id":0} ( 使用一个id,这表明只有一个预期的匹配项,因此使用位置运算符应该适合您的用例。但是,值得注意的是,如果更新查询文档与多个联系人匹配,则只会更新第一个匹配的联系人。

最新更新