Nic złego w tym, co w zasadzie próbujesz, ale być może jedynym wyjaśnieniem jest powszechne błędne przekonanie, że potrzebujesz operatorów takich jak $nin
lub $in
podczas zapytania o tablicę.
Również naprawdę musisz tutaj zrobić podstawowe dopasowanie nierówności za pomocą $ne
:
Person.find({ "groups": { "$ne": group._id } })
Operatory „tablicy” nie służą do „tablic docelowych”, ale do dostarczania „listy” warunków do przetestowania w wygodnej formie.
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })
Więc po prostu użyj normalnych operatorów dla pojedynczych warunków i zapisz $in
i $nin
gdzie chcesz przetestować więcej niż jeden warunek z pojedynczą wartością lub listą. Więc jest na odwrót.
Jeśli musisz przekazać „listę” argumentów, w których „żaden” z podanej listy nie pasuje do zawartości tablicy, odwracasz logikę za pomocą $not
operator i $all
operator:
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })
Oznacza to, że w tablicy nie ma „żadnej z podanej listy”.