sql >> Databasteknik >  >> NoSQL >> MongoDB

Hitta dokument med array som inte innehåller ett specifikt värde

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.



  1. När ska man använda Redis istället för MySQL för PHP-applikationer?

  2. Varför finns det NYCKEL- och ARGV-matriser när man anropar Redis Lua-skript?

  3. Hur returnerar man Mongoose-resultat från hittametoden?

  4. Migrera MongoDB till DynamoDB, del 2