sql >> Databasteknik >  >> NoSQL >> MongoDB

Uppdatera ett objekt i en array med PyMongo

Använd "dot notation" och positionsoperatören i uppdateringsdelen. Förvandla också din inmatning så att den matchar "punktnotation"-formuläret för nyckelrepresentationen:

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

Så det kommer att överföra $ till den faktiska matchade elementpositionen från frågedelen av uppdateringen. Det matchade arrayelementet kommer att uppdateras och med hjälp av "dot notation" kommer endast de nämnda fälten att påverkas.

Har ingen aning om vad "tjänst" ska betyda i detta sammanhang och jag behandlar det bara som ett "transkriberingsfel" eftersom du helt klart försöker matcha ett arrayelement i position.

Det kan vara renare, men det här borde ge dig den allmänna uppfattningen.




  1. ArgumentException:Ogiltigt sökord 'mongodb+srv://test:[email protected]' i MongoDB + Unity2D - Live MongoDB ansluter inte

  2. MongoDB-resultatuppsättning för Aggregate()

  3. MongooseError - Operation `users.findOne()`-buffring togs ut efter 10 000 ms

  4. Hur man ansluter till Redis-instans (memorystore) från Googles standardappmotor (Python 3.7)