"ドット表記" を使用します 更新部分の位置演算子。また、入力を変換して、キー表現の「ドット表記」形式に一致させます。
# 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 }
)
これで$
が転置されます 更新のクエリ部分から実際に一致した要素の位置に移動します。一致した配列要素が更新され、「ドット表記」を使用すると、言及されたフィールドのみが影響を受けます。
このコンテキストで「サービス」が何を意味するのかわかりません。配列要素の位置を明確に一致させようとしているため、これを「転記エラー」として扱っています。
それはもっときれいかもしれませんが、これはあなたに一般的な考えを与えるはずです。