web-dev-qa-db-ja.com

MongoDB-ネストされた配列のオブジェクトを更新する

{
  "_id": "xPBc4By8FemDwTPqH",
  "u": {
    "_id": "6PoZawHZcQz4Gwzcv",
    "username": "michael"
  },
  "friends": [
    {
      "u": {
        "_id": "eGqDjAjjtYADbuSnn",
        "username": "michael",
        "name": "michael"
      }
    },
    {
      "u": {
        "_id": "k4gKCGwYryXDMMHvs",
        "username": "joyce",
        "name": "joyce"
      }
    }
  ]
}

「friends.u.username」の名前を更新します。「michael」の名前は「hello」です。どうすればいいですか。

24
徐巧民

$set 演算子と $位置演算子 更新でnameフィールドを変更します。

$位置演算子 は、配列内の要素の位置を明示的に指定せずに更新する配列内の正しい要素を識別するため、最終更新ステートメントは次のようになります。

db.collection.update(
    { "friends.u.username": "michael" }, 
    { "$set": { "friends.$.u.name": "hello" } }
)
47
chridam

$ set演算子を使用できます。

> db.test.update({"friends.u._id":"eGqDjAjjtYADbuSnn"},{$set:{"friends.$.u.name":"hello"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
4
Srivatsa N