MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Localizar documentos com matriz que não contém um valor específico


Nada de errado com o que você está basicamente tentando, mas talvez o único esclarecimento aqui seja o equívoco comum de que você precisa de operadores como $nin ou $in ao consultar uma matriz.

Além disso, você realmente precisa fazer aqui uma correspondência de desigualdade básica com $ne :
Person.find({ "groups": { "$ne": group._id } })

Os operadores "array" não são para "alvos de array", mas para fornecer uma "lista" de condições a serem testadas de forma conveniente.
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })

Portanto, use operadores normais para condições únicas e salve $in e $nin para onde você deseja testar mais de uma condição em relação a um único valor ou uma lista. Então é só o contrário.

Se você precisar passar uma "lista" de argumentos em que "nenhum" daqueles na lista fornecida corresponde ao conteúdo da matriz, você inverte a lógica com o $not operador e o $all operador:
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })

Então isso significa que "nenhum da lista" fornecida está presente na matriz.