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

การใช้งานออปเจอเตอร์ $or ใน MongoDB เพื่อดึงข้อมูลตามเงื่อนไขการมีอยู่ของฟิลด์

ใช้ $or ร่วมกับ $exists เพื่อกรองข้อมูลตามการมีอยู่ของฟิลด์

บทความนี้สาธิตวิธีการใช้งานออปเจอเตอร์ $or ใน MongoDB ร่วมกับ $exists เพื่อดึงเอกสารที่มีฟิลด์เฉพาะอยู่ (exist) หรือไม่มีอยู่ (not exist)

ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง

สร้าง collection ชื่อ demo185 และเพิ่มเอกสาร 3 รายการ ซึ่งบางรายการมีฟิลด์ details.Subjects.Name และบางรายการไม่มี

> db.demo185.insertOne({_id:101,details:{Name:"Chris",Score:78,Subjects:{"Name":"MySQL"}}});
{ "acknowledged": true, "insertedId": 101 }

> db.demo185.insertOne({_id:102,details:{Name:"Bob",Score:78}});
{ "acknowledged": true, "insertedId": 102 }

> db.demo185.insertOne({_id:103,details:{Name:"David",Score:78,Subjects:{"Name":"MongoDB"}}});
{ "acknowledged": true, "insertedId": 103 }

ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด

> db.demo185.find();

ผลลัพธ์:

{ "_id": 101, "details": { "Name": "Chris", "Score": 78, "Subjects": { "Name": "MySQL" } } }
{ "_id": 102, "details": { "Name": "Bob", "Score": 78 } }
{ "_id": 103, "details": { "Name": "David", "Score": 78, "Subjects": { "Name": "MongoDB" } } }

ขั้นตอนที่ 3: ใช้ $or ร่วมกับ $exists

คิวรี่ต่อไปนี้จะดึงเอกสารที่มีฟิลด์ details.Subjects.Name อยู่ (ใช้ $exists: true) - ตัวอย่างใช้ $or แบบซ้ำกันเพื่อสาธิตโครงสร้าง

> db.demo185.find({
    "$or": [
        { "details.Subjects.Name": { "$exists": true } },
        { "details.Subjects.Name": { "$exists": true } }
    ]
})

ผลลัพธ์ที่ได้

{ "_id": 101, "details": { "Name": "Chris", "Score": 78, "Subjects": { "Name": "MySQL" } } }
{ "_id": 103, "details": { "Name": "David", "Score": 78, "Subjects": { "Name": "MongoDB" } } }

หมายเหตุ: ในตัวอย่างนี้ $or มีเงื่อนไขซ้ำกัน 2 เงื่อนไข ซึ่งในทางปฏิบัติควรใช้เงื่อนไขที่แตกต่างกัน เช่น ตรวจสอบฟิลด์ต่างๆ หรือรวมกับเงื่อนไขอื่นๆ