Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

การใช้ $addToSet หลายครั้งในคำสั่ง update เดียวของ MongoDB

สามารถใช้ $addToSet หลายครั้งในคำสั่ง update() เดียวกันได้ โดย MongoDB จะตรวจสอบค่าซ้ำก่อนเพิ่มเข้าไปในอาร์เรย์

ตัวอย่างข้อมูลทดสอบ

> db.demo27.insertOne({"StudentDetails":{"101":{"Subject":["Java"]}}});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e15f9e822d07d3b95082e7f")
}
> db.demo27.insertOne({"StudentDetails":{"101":{"Subject":["MySQL"]}}});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e15f9eb22d07d3b95082e80")
}

แสดงข้อมูลก่อนอัปเดต

> db.demo27.find().pretty();
{
    "_id" : ObjectId("5e15f9e822d07d3b95082e7f"),
    "StudentDetails" : {
        "101" : {
            "Subject" : [
                "Java"
            ]
        }
    }
}
{
    "_id" : ObjectId("5e15f9eb22d07d3b95082e80"),
    "StudentDetails" : {
        "101" : {
            "Subject" : [
                "MySQL"
            ]
        }
    }
}

คำสั่งอัปเดตด้วย $addToSet

> db.demo27.update({}, {$addToSet: {"StudentDetails.101.Subject": "MongoDB"}}, {upsert: true})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

ผลลัพธ์หลังอัปเดต

{
    "_id" : ObjectId("5e15f9e822d07d3b95082e7f"),
    "StudentDetails" : {
        "101" : {
            "Subject" : [
                "Java",
                "MongoDB"
            ]
        }
    }
}
{
    "_id" : ObjectId("5e15f9eb22d07d3b95082e80"),
    "StudentDetails" : {
        "101" : {
            "Subject" : [
                "MySQL"
            ]
        }
    }
}

หมายเหตุ: $addToSet จะเพิ่ม "MongoDB" เฉพาะเอกสารแรกที่มี "Java" อยู่แล้ว (ไม่ซ้ำ) ส่วนเอกสารที่สองไม่มีการเปลี่ยนแปลงเพราะเงื่อนไขค้นหา {} ตรงกับเอกสารแรกเท่านั้น (default multi: false)