Non c'è niente di sbagliato in ciò che stai praticamente tentando, ma forse l'unico chiarimento qui è l'idea sbagliata comune che hai bisogno di operatori come $nin
o $in
quando si interroga un array.
Inoltre, devi davvero fare qui una corrispondenza di disuguaglianza di base con $ne
:
Person.find({ "groups": { "$ne": group._id } })
Gli operatori "array" non servono per "target array" ma per fornire un "elenco" di condizioni da testare in una forma conveniente.
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })
Quindi usa gli operatori normali per singole condizioni e salva $in
e $nin
per dove vuoi testare più di una condizione rispetto a un singolo valore o a un elenco. Quindi è proprio il contrario.
Se è necessario passare un "elenco" di argomenti in cui "nessuno" di quelli nell'elenco fornito corrisponde al contenuto dell'array, invertire la logica con $not
operatore e il $all
operatore:
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })
Ciò significa che "nessuno dell'elenco" fornito è presente nell'array.