sql >> Base de Datos >  >> NoSQL >> MongoDB

Encuentre documentos con una matriz que no contenga un valor específico

No hay nada de malo en lo que básicamente está intentando, pero quizás la única aclaración aquí es el concepto erróneo común de que necesita operadores como $nin o $in al consultar una matriz.

También lo que realmente necesita hacer aquí es una coincidencia de desigualdad básica con $ne :

Person.find({ "groups": { "$ne": group._id } })

Los operadores de "matriz" no son para "objetivos de matriz" sino para proporcionar una "lista" de condiciones para probar en una forma conveniente.

Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })

Así que solo use operadores normales para condiciones individuales y guarde $in y $nin para donde desea probar más de una condición contra un solo valor o una lista. Así que es al revés.

Si necesita pasar una "lista" de argumentos donde "ninguno" de los de la lista proporcionada coincide con el contenido de la matriz, invierta la lógica con $not operador y el $all operador:

Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })

Eso significa que "ninguno de los de la lista" proporcionada está presente en la matriz.