MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Trova i documenti con una matrice che non contiene un valore specifico

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.