MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Aggiornamento di un oggetto all'interno di un array con PyMongo

Usa "dot notation" e l'operatore posizionale nella parte di aggiornamento. Trasforma anche il tuo input in modo che corrisponda al modulo "notazione punto" per la rappresentazione della chiave:

# 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 }
)

Quindi trasposterà $ alla posizione effettiva dell'elemento corrispondente dalla parte della query dell'aggiornamento. L'elemento dell'array corrispondente verrà aggiornato e utilizzando la "notazione del punto" verranno interessati solo i campi menzionati.

Non ho idea di cosa significhi "servizio" in questo contesto e lo sto solo trattando come un "errore di trascrizione" poiché stai chiaramente cercando di abbinare un elemento dell'array in posizione.

Potrebbe essere più pulito, ma dovrebbe darti un'idea generale.