MongoDB - 更新嵌套数组中的对象

徐巧民*_*徐巧民 25 updates mongodb

{
  "_id": "xPBc4By8FemDwTPqH",
  "u": {
    "_id": "6PoZawHZcQz4Gwzcv",
    "username": "michael"
  },
  "friends": [
    {
      "u": {
        "_id": "eGqDjAjjtYADbuSnn",
        "username": "michael",
        "name": "michael"
      }
    },
    {
      "u": {
        "_id": "k4gKCGwYryXDMMHvs",
        "username": "joyce",
        "name": "joyce"
      }
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我想更新"friends.u.username"的名称:"michael"的名字是"你好",我需要怎么做.

chr*_*dam 51

在更新中将$set操作符与$位置操作符一起应用以更改name字段.

$位置操作者将确定正确的元素数组中没有明确指定数组中元素的位置更新,因此您的最终更新语句应该是这样的:

db.collection.update(
    { "friends.u.username": "michael" }, 
    { "$set": { "friends.$.u.name": "hello" } }
)
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用 MongoDB 3.2.0。显然这个版本不支持这种操作。 (2认同)
  • 对我来说,这只修改了一个元素。如果匹配多个元素,则仅更新第一个元素 (2认同)

Sri*_*a N 5

您可以使用 $set 运算符。

> db.test.update({"friends.u._id":"eGqDjAjjtYADbuSnn"},{$set:{"friends.$.u.name":"hello"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Run Code Online (Sandbox Code Playgroud)