Toán tử $nor trả về document KHÔNG khớp với bất kỳ điều kiện nào trong mảng điều kiện. Hữu ích để loại trừ nhiều trường hợp cùng lúc.
Dữ liệu mẫu
> 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") }
Truy vấn $nor
Loại trừ: Name="Chris" HOẶC Age=21 HOẶC thiếu trường Name HOẶC thiếu trường Age:
> db.demo100.find({
$nor: [
{ Name: "Chris" },
{ Name: { $exists: false } },
{ Age: 21 },
{ Age: { $exists: false } }
]
});
Kết quả
{ "_id" : ObjectId("5e2d962cb8903cdd865577c1"), "Name" : "David", "Age" : 23 }
{ "_id" : ObjectId("5e2d9634b8903cdd865577c2"), "Name" : "Bob", "Age" : 19 }
Logic $nor: Document được giữ nếu TẤT CẢ điều kiện trong mảng đều FALSE.
- David: Name≠Chris, Name tồn tại, Age≠21, Age tồn tại → 4 FALSE → Giữ
- Bob: Name≠Chris, Name tồn tại, Age≠21, Age tồn tại → 4 FALSE → Giữ
- Chris: Name=Chris (TRUE) → Loại
So sánh: $or (ít nhất 1 TRUE), $and (tất cả TRUE), $nor (tất cả FALSE), $not (phủ định 1 điều kiện).