Det för närvarande accepterade svaret garanterar INTE en exakt matchning på din array, bara att storleken är identisk och att arrayen delar minst ett objekt med frågearrayen.
Till exempel frågan
db.coll.find({ "hobbies": { "$size" : 2, "$in": [ "2", "1", "5", "hamburger" ] } });
skulle fortfarande returnera användaren kaushik i så fall.
Vad du behöver göra för en exakt matchning är att kombinera $size
med $all
, som så:
db.coll.find({ "hobbies": { "$size" : 2, "$all": [ "2", "1" ] } });
Men tänk på att detta kan vara en mycket dyr operation, beroende på din mängd och struktur av data. Eftersom MongoDB håller ordningen på infogade arrayer stabil kan du kanske klara dig bättre med att se till att arrays är i en sorterad ordning när du infogar i DB, så att du kan lita på en statisk ordning när du frågar.