Giả sử chúng tôi có bộ sưu tập sau đây, mà tôi có vài câu hỏi về:
{
"_id" : ObjectId("4faaba123412d654fe83hg876"),
"user_id" : 123456,
"total" : 100,
"items" : [
{
"item_name" : "my_item_one",
"price" : 20
},
{
"item_name" : "my_item_two",
"price" : 50
},
{
"item_name" : "my_item_three",
"price" : 30
}
]
}
1 - Tôi muốn tăng giá cho "item_name": "my_item_two" và nếu nó không tồn tại , nó nên được thêm vào mảng "vật phẩm".
2 - Làm cách nào tôi có thể cập nhật hai trường cùng một lúc. Ví dụ: tăng giá cho "my_item_three" và đồng thời tăng "tổng" (có cùng giá trị).
Tôi thích làm điều này ở phía MongoDB, nếu không tôi phải tải tài liệu ở phía máy khách (Python) và xây dựng tài liệu cập nhật và thay thế nó bằng tài liệu hiện có trong MongoDB.
CẬP NHẬT Đây là những gì tôi đã cố gắng và hoạt động tốt NẾU Đối tượng tồn tại :
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
Nhưng nếu khóa không tồn tại thì không có gì. Ngoài ra nó chỉ cập nhật các đối tượng lồng nhau. Không có cách nào với lệnh này để cập nhật trường "tổng".