Inget fel med det du i princip försöker, men kanske det enda förtydligandet här är den vanliga missuppfattningen att du behöver operatorer som $nin
eller $in
när du frågar efter en array.
Också du verkligen behöver göra här är en grundläggande ojämlikhetsmatchning med $ne
:
Person.find({ "groups": { "$ne": group._id } })
"Array"-operatorerna är inte för "array-mål" utan för att tillhandahålla en "lista" över villkor att testa i en bekväm form.
Person.find({ "groups": { "$nin": [oneId, twoId,threeId] } })
Så använd bara normala operatorer för enstaka villkor och spara $in
och $nin
för där du vill testa mer än ett villkor mot antingen ett enskilt värde eller en lista. Så det är precis tvärtom.
Om du behöver skicka en "lista" med argument där "ingen" av de i den angivna listan matchar innehållet i arrayen, vänder du logiken med $not
operatorn och $all
operatör:
Person.find({ "groups": { "$not": { "$all": [oneId,twoId,threeId] } } })
Så det betyder att "ingen av listan" som tillhandahålls finns i arrayen.