Operator $nor` ใน MongoDB ใช้สำหรับ query แบบ "ไม่ใช่ทั้งหมด" (Logical NOR) - คืนค่าเอกสารที่ ไม่ตรง ทุกเงื่อนไขใน array ที่กำหนด
สร้างคอลเลกชันและข้อมูลตัวอย่าง
> db.demo100.insertOne({"Name":"Chris","Age":21});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2d9624b8903cdd865577c0") }
> db.demo100.insertOne({"Name":"David","Age":23});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2d962cb8903cdd865577c1") }
> db.demo100.insertOne({"Name":"Bob","Age":19});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2d9634b8903cdd865577c2") }
แสดงข้อมูลทั้งหมด
> db.demo100.find();
ผลลัพธ์: 3 เอกสาร (Chris/21, David/23, Bob/19)
Query ใช้ $nor ยกเว้นเอกสารที่ Name=Chris หรือ Age=21
> db.demo100.find({
$nor: [
{ Name: "Chris" },
{ Name: { $exists: false } },
{ Age: 21 },
{ Age: { $exists: false } }
]
});
คำอธิบายเงื่อนไขใน $nor:
{Name: "Chris"}: ยกเว้น Name = Chris{Name: {$exists: false}}: ยกเว้นเอกสารที่ไม่มี field Name{Age: 21}: ยกเว้น Age = 21{Age: {$exists: false}}: ยกเว้นเอกสารที่ไม่มี field Age
$nor = NOT (condition1 OR condition2 OR ...) = เอกสารต้อง ไม่ตรง ทุกเงื่อนไขจึงจะถูกเลือก
ผลลัพธ์
{ "_id" : ObjectId("5e2d962cb8903cdd865577c1"), "Name" : "David", "Age" : 23 }
{ "_id" : ObjectId("5e2d9634b8903cdd865577c2"), "Name" : "Bob", "Age" : 19 }
David (Age 23) และ Bob (Age 19) ผ่าน เพราะ: - Name ไม่ใช่ Chris ✓ - มี field Name ✓ - Age ไม่ใช่ 21 ✓ - มี field Age ✓
เปรียบเทียบ $nor vs $not vs $nin
| Operator | ความหมาย | ใช้เมื่อไหร่ |
|---|---|---|
$nor | ไม่ใช่เงื่อนไขใดเลย (NOR) | หลายเงื่อนไข ต้อง fail ทั้งหมด |
$not | ย้อนกลับเงื่อนไขเดียว | expression เดียว |
$nin | ไม่อยู่ใน array | field value ไม่อยู่ในค่าที่กำหนด |