Bạn có thể sử dụng cú pháp $ set nếu bạn muốn đặt giá trị của một tài liệu thành một giá trị tùy ý. Thao tác này sẽ cập nhật giá trị nếu thuộc tính đã tồn tại trên tài liệu hoặc tạo nó nếu thuộc tính không tồn tại. Nếu bạn cần đặt một giá trị duy nhất trong từ điển như bạn mô tả, bạn có thể sử dụng ký hiệu dấu chấm để truy cập các giá trị con.
Nếu p là đối tượng được truy xuất:
existing = p['d']['a']
Đối với phiên bản pymongo <3.0
db.ProductData.update({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False, multi=False)
Đối với phiên bản pymongo> =3.0
db.ProductData.update_one({
'_id': p['_id']
},{
'$set': {
'd.a': existing + 1
}
}, upsert=False)
Tuy nhiên, nếu bạn chỉ cần tăng giá trị, cách tiếp cận này có thể gây ra các vấn đề khi nhiều yêu cầu có thể chạy đồng thời. Thay vào đó, bạn nên sử dụng cú pháp $ inc:
Đối với phiên bản pymongo <3.0:
db.ProductData.update({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False, multi=False)
Đối với phiên bản pymongo> =3.0:
db.ProductData.update_one({
'_id': p['_id']
},{
'$inc': {
'd.a': 1
}
}, upsert=False)
Điều này đảm bảo gia tăng của bạn sẽ luôn xảy ra.