MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Aktualisieren eines Objekts in einem Array mit PyMongo

Verwenden Sie "Punktnotation" und den Positionsoperator im Aktualisierungsabschnitt. Wandeln Sie Ihre Eingabe auch so um, dass sie der Form der „Punktnotation“ für die Schlüsseldarstellung entspricht:

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

Das wird also $ transponieren zur tatsächlichen übereinstimmenden Elementposition aus dem Abfrageteil der Aktualisierung. Das übereinstimmende Array-Element wird aktualisiert und bei Verwendung der "Punkt-Notation" werden nur die erwähnten Felder beeinflusst.

Ich habe keine Ahnung, was "Service" in diesem Zusammenhang bedeuten soll, und ich behandle es nur als "Transkriptionsfehler", da Sie eindeutig versuchen, ein Array-Element in Position zu finden.

Das könnte sauberer sein, aber das sollte Ihnen eine ungefähre Vorstellung geben.