Използвайте "нотация с точка" и позиционния оператор в частта за актуализиране. Също така преобразувайте въведените данни, за да съответстват на формата за „точкова нотация“ за представянето на ключа:
# 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 }
)
Така че това ще транспонира $
към действителната съвпадаща позиция на елемент от частта за заявка на актуализацията. Съответстващият елемент на масива ще бъде актуализиран и с помощта на „точкова нотация“ ще бъдат засегнати само споменатите полета.
Нямам представа какво трябва да означава „услуга“ в този контекст и аз просто го третирам като „грешка при транскрибиране“, тъй като очевидно се опитвате да съпоставите елемент от масив в позиция.
Това може да е по-ясно, но това трябва да ви даде обща представа.