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.