Na tom, o co se v podstatě pokoušíte, není nic špatného, ale možná jediným vysvětlením je běžná mylná představa, že potřebujete operátory jako $nin nebo $in při dotazu na pole.
Také zde musíte udělat základní nerovnost s $ne :
Person.find({ "groups": { "$ne": group._id } })
Operátory „pole“ nejsou pro „cíle pole“, ale pro poskytování „seznamu“ podmínek k testování ve vhodné formě.
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })
Stačí tedy použít normální operátory pro jednotlivé podmínky a ušetřit $in a $nin tam, kde chcete otestovat více než jednu podmínku proti jedné hodnotě nebo seznamu. Takže je to právě naopak.
Pokud potřebujete předat „seznam“ argumentů, kde „žádný“ z těch v poskytnutém seznamu neodpovídá obsahu pole, pak logiku obrátíte pomocí $not operátor a $all operátor:
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })
To tedy znamená, že v poli není přítomen „žádný z uvedených seznamů“.