Sử dụng "ký hiệu dấu chấm" và toán tử vị trí trong phần cập nhật. Đồng thời chuyển đổi đầu vào của bạn để phù hợp với dạng "ký hiệu dấu chấm" cho biểu diễn khóa:
# 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 }
)
Vì vậy, điều đó sẽ chuyển vị $
đến vị trí phần tử phù hợp thực tế từ phần truy vấn của bản cập nhật. Phần tử mảng phù hợp sẽ được cập nhật và việc sử dụng "ký hiệu dấu chấm" chỉ các trường được đề cập sẽ bị ảnh hưởng.
Không biết "dịch vụ" có nghĩa là gì trong ngữ cảnh này và tôi chỉ coi đó là "lỗi phiên âm" vì rõ ràng bạn đang cố gắng khớp một phần tử mảng ở vị trí.
Điều đó có thể rõ ràng hơn, nhưng điều này sẽ cung cấp cho bạn ý tưởng chung.