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.