Det aktuelt accepterede svar sikrer IKKE et nøjagtigt match på dit array, bare at størrelsen er identisk, og at arrayet deler mindst ét element med forespørgselsarrayet.
For eksempel forespørgslen
db.coll.find({ "hobbies": { "$size" : 2, "$in": [ "2", "1", "5", "hamburger" ] } });
ville stadig returnere brugeren kaushik i så fald.
Det du skal gøre for at få et nøjagtigt match er at kombinere $size
med $all
, sådan:
db.coll.find({ "hobbies": { "$size" : 2, "$all": [ "2", "1" ] } });
Men vær opmærksom på, at dette kan være en meget dyr operation, afhængigt af din mængde og struktur af data. Da MongoDB holder rækkefølgen af indsatte arrays stabil, kan du måske klare dig bedre med at sikre arrays at være i en sorteret rækkefølge, når du indsætter til DB, så du kan stole på en statisk ordre, når du forespørger.