web-dev-qa-db-fra.com

MongoDB - Mettre à jour un objet dans un tableau imbriqué

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

Je veux mettre à jour le nom de "friends.u.username": le nom de "michael" est "bonjour", comment je dois le faire.

24
徐巧民

Appliquez le $set avec l'opérateur $ opérateur positionnel dans votre mise à jour pour changer le champ name.

Le $ opérateur positionnel identifiera l'élément correct dans le tableau à mettre à jour sans spécifier explicitement la position de l'élément dans le tableau, ainsi votre déclaration de mise à jour finale devrait ressembler à:

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

Vous pouvez utiliser l'opérateur $ set.

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