Gunakan "notasi titik" dan operator posisi di bagian pembaruan. Ubah juga masukan Anda agar sesuai dengan formulir "notasi titik" untuk representasi kunci:
# 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 }
)
Jadi itu akan mengubah $
ke posisi elemen yang cocok sebenarnya dari bagian kueri pembaruan. Elemen larik yang cocok akan diperbarui dan menggunakan "notasi titik" hanya bidang yang disebutkan yang akan terpengaruh.
Tidak tahu apa yang dimaksud dengan "layanan" dalam konteks ini dan saya hanya memperlakukannya sebagai "kesalahan transkripsi" karena Anda jelas-jelas mencoba mencocokkan elemen array pada posisinya.
Itu bisa lebih bersih, tetapi ini akan memberi Anda gambaran umum.