MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mettre à jour un objet dans un tableau avec PyMongo

Utilisez la "notation par points" et l'opérateur positionnel dans la partie mise à jour. Transformez également votre entrée pour qu'elle corresponde à la forme "notation par points" pour la représentation clé :

# Transform to "dot notation" on explicit field
for key in data:
    data["mylist.$." + key] = data[key]
    del data[key]

# Basically makes
# { 
#      "mylist.$.data1": "new lorem",
#      "mylist.$.data3": "goldeneye"
# }

db.testing.find_and_modify(
    query = {"_id": "12345", 'mylist.nested_id' : "1"},
    update = { "$set": data }
)

Donc ça va transposer $ à la position réelle de l'élément correspondant à partir de la partie requête de la mise à jour. L'élément de tableau correspondant sera mis à jour et en utilisant la "notation par points", seuls les champs mentionnés seront affectés.

Je n'ai aucune idée de ce que "service" est censé signifier dans ce contexte et je le traite simplement comme une "erreur de transcription" puisque vous essayez clairement de faire correspondre un élément de tableau en position.

Cela pourrait être plus clair, mais cela devrait vous donner une idée générale.