บทความนี้แนะนำการใช้ Operator $or ร่วมกับ find() เพื่อค้นหาเอกสารที่ตรงตาม เงื่อนไขใดเงื่อนไขหนึ่ง จากหลายเงื่อนไขที่เกี่ยวข้องกับหลายฟิลด์
สร้างข้อมูลตัวอย่าง
> db.findDocumentWithFilterDemo.insertOne({"ClientName":"Robert","IsMarried":false});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd4fd1e2cba06f46efe9ef1") }
> db.findDocumentWithFilterDemo.insertOne({"ClientName":"Chris","IsMarried":true});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd4fd322cba06f46efe9ef2") }
> db.findDocumentWithFilterDemo.insertOne({"ClientName":"David","IsMarried":true});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd4fd3b2cba06f46efe9ef3") }
> db.findDocumentWithFilterDemo.insertOne({"ClientName":"Carol","IsMarried":true});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd4fd452cba06f46efe9ef4") }
แสดงข้อมูลทั้งหมด
> db.findDocumentWithFilterDemo.find().pretty();
{
"_id" : ObjectId("5cd4fd1e2cba06f46efe9ef1"),
"ClientName" : "Robert",
"IsMarried" : false
}
{
"_id" : ObjectId("5cd4fd322cba06f46efe9ef2"),
"ClientName" : "Chris",
"IsMarried" : true
}
{
"_id" : ObjectId("5cd4fd3b2cba06f46efe9ef3"),
"ClientName" : "David",
"IsMarried" : true
}
{
"_id" : ObjectId("5cd4fd452cba06f46efe9ef4"),
"ClientName" : "Carol",
"IsMarried" : true
}
ค้นหาด้วย $or: ClientName ไม่ใช่ "Robert" OR IsMarried ไม่ใช่ false
> db.findDocumentWithFilterDemo.find({
$or: [
{ "ClientName": { $ne: "Robert" } },
{ "IsMarried": { $ne: false } }
]
});
ผลลัพธ์
{
"_id" : ObjectId("5cd4fd322cba06f46efe9ef2"),
"ClientName" : "Chris",
"IsMarried" : true
}
{
"_id" : ObjectId("5cd4fd3b2cba06f46efe9ef3"),
"ClientName" : "David",
"IsMarried" : true
}
{
"_id" : ObjectId("5cd4fd452cba06f46efe9ef4"),
"ClientName" : "Carol",
"IsMarried" : true
}
คำอธิบาย Logic
Query นี้คืนค่าเอกสารที่ ตรงตามเงื่อนไขอย่างน้อย 1 ข้อ:
- ClientName ไม่ใช่ "Robert" (Chris, David, Carol ตรง)
- IsMarried ไม่ใช่ false (Chris, David, Carol ตรง)
เอกสารของ Robert (IsMarried: false) ไม่ตรง ทั้งสองเงื่อนไข จึงถูกตัดออก
เทคนิคเพิ่มเติม: รวม $or และ $and
// หา: (ClientName = "Chris" OR ClientName = "David") AND IsMarried = true
db.collection.find({
$and: [
{ $or: [{ "ClientName": "Chris" }, { "ClientName": "David" }] },
{ "IsMarried": true }
]
});