Để loại trừ các document mà trường id có giá trị xuất hiện trong mảng subjectid, ta kết hợp $expr, $not và $in.
Dữ liệu mẫu
[
{
id: "101",
subjectid: [ "102" ]
},
{
id: "102",
subjectid: [ "102" ]
}
]
Truy vấn find với $expr
$expr cho phép sử dụng các biểu thức aggregation trong find. $in kiểm tra sự tồn tại, $not phủ định kết quả:
db.collection.find({
$expr: {
$not: {
$in: [
"$id",
"$subjectid"
]
}
}
})
Kết quả
[
{
"_id": ObjectId("5a934e000102030405000000"),
"id": "101",
"subjectid": [ "102" ]
}
]
Giải thích:
- Document 1: id="101" không nằm trong subjectid=["102"] → giữ lại
- Document 2: id="102" nằm trong subjectid=["102"] → loại bỏ
Cách này hữu ích khi cần so sánh giá trị của một trường với các phần tử trong mảng của chính document đó.