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ů“.