sql >> Database >  >> NoSQL >> MongoDB

Een object binnen een array bijwerken met PyMongo

Gebruik "puntnotatie" en de positionele operator in het updategedeelte. Transformeer ook uw invoer zodat deze overeenkomt met het "puntnotatie"-formulier voor de sleutelweergave:

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

Dus dat transponeert $ naar de werkelijke overeenkomende elementpositie van het querygedeelte van de update. Het overeenkomende array-element wordt bijgewerkt en met behulp van "puntnotatie" worden alleen de genoemde velden beïnvloed.

Ik heb geen idee wat 'service' in deze context zou moeten betekenen en ik behandel het gewoon als een 'transcribeerfout', omdat je duidelijk probeert een array-element in positie te matchen.

Dat zou schoner kunnen zijn, maar dit zou u een algemeen idee moeten geven.




  1. Lijst met geneste sleutels opnieuw weergeven

  2. Rack Awareness in Hadoop en zijn voordelen

  3. MongoDB - Een document maken

  4. Hoe gebruik ik een guid in een mongodb-shellquery?