สมมติว่าเรามีคอลเล็กชันต่อไปนี้ซึ่งฉันมีคำถามสองสามข้อเกี่ยวกับ:
{
"_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 - ฉันต้องการเพิ่มราคาสำหรับ "item_name": "my_item_two" และหากไม่มีอยู่ก็ควรผนวกเข้ากับอาร์เรย์ "items"
2 - ฉันจะอัปเดตสองฟิลด์พร้อมกันได้อย่างไร ตัวอย่างเช่นเพิ่มราคาสำหรับ "my_item_three" และในเวลาเดียวกันเพิ่ม "ผลรวม" (ด้วยค่าเดียวกัน)
ฉันชอบที่จะทำสิ่งนี้ในด้าน MongoDB มิฉะนั้นฉันต้องโหลดเอกสารในฝั่งไคลเอ็นต์ (Python) และสร้างเอกสารที่อัปเดตแล้วแทนที่ด้วยเอกสารที่มีอยู่ใน MongoDB
UPDATE นี่คือสิ่งที่ฉันได้ลองและทำงานได้ดีถ้า Object มีอยู่ :
db.test_invoice.update({user_id : 123456 , "items.item_name":"my_item_one"} , {$inc: {"items.$.price": 10}})
แต่ถ้าไม่มีกุญแจมันก็ไม่ทำอะไรเลย นอกจากนี้มันจะอัพเดตวัตถุที่ซ้อนกันเท่านั้น ไม่มีวิธีใดที่คำสั่งนี้จะอัปเดตฟิลด์ "รวม" เช่นกัน