Ответ 1
Ничего плохого в том, что вы в основном пытаетесь, но, возможно, единственное разъяснение здесь - распространенное заблуждение, что вам нужны операторы, такие как $nin
или $in
при запросе массива.
Также вам действительно нужно выполнить базовое неравенство с $ne
:
Person.find({ "groups": { "$ne": group._id } })
Операторы "массива" не предназначены для "целей массива", а для предоставления "списка" условий для проверки в удобной форме.
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })
Поэтому просто используйте обычные операторы для одиночных условий и сохраняйте $in
и $nin
для тех, где вы хотите протестировать более одного условия по отношению к одному значению или списку. Так что это просто наоборот.
Если вам нужно передать "список" аргументов, где "none" из тех, что указаны в представленном списке, соответствуют содержимому массива, тогда вы отменяете логику с помощью $not
и оператор $all
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })
Таким образом, это означает, что в массиве присутствует "ни один из списка".