Về cơ bản, không có gì sai với những gì bạn đang cố gắng, nhưng có lẽ điều làm rõ duy nhất ở đây là quan niệm sai lầm phổ biến rằng bạn cần các toán tử như $nin
hoặc $in
khi truy vấn một mảng.
Ngoài ra, bạn thực sự cần làm ở đây là đối sánh bất đẳng thức cơ bản với $ne
:
Person.find({ "groups": { "$ne": group._id } })
Toán tử "mảng" không dành cho "mục tiêu mảng" mà để cung cấp "danh sách" các điều kiện để kiểm tra ở dạng thuận tiện.
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })
Vì vậy, chỉ cần sử dụng các toán tử bình thường cho các điều kiện đơn lẻ và tiết kiệm $in
và $nin
cho nơi bạn muốn kiểm tra nhiều hơn một điều kiện đối với một giá trị đơn lẻ hoặc một danh sách. Vì vậy, nó chỉ là một chiều ngược lại.
Nếu bạn cần chuyển "danh sách" các đối số trong đó "không" đối số nào trong danh sách được cung cấp khớp với nội dung của mảng thì bạn đảo ngược logic với $not
toán tử và $all
nhà điều hành:
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })
Vì vậy, điều đó có nghĩa là "không có danh sách nào trong danh sách" được cung cấp hiện diện trong mảng.