Użyj "notacji z kropkami" oraz operator pozycyjny w części aktualizacyjnej. Przekształć również swoje dane wejściowe, aby pasowały do postaci „notacji kropkowej” dla reprezentacji klucza:
# 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 }
)
Więc to transponuje $
do rzeczywistej pozycji dopasowanego elementu z części zapytania aktualizacji. Dopasowany element tablicy zostanie zaktualizowany, a użycie „notacji kropkowej” wpłynie tylko na wymienione pola.
Nie mam pojęcia, co ma oznaczać „usługa” w tym kontekście, a ja traktuję to jako „błąd transkrypcji”, ponieważ wyraźnie próbujesz dopasować element tablicy w pozycji.
To może być czystsze, ale to powinno dać ci ogólny pomysł.