Efter att ha kört några frågor kom jag till slutsatsen att $in inte fungerar för en array av arrayer .
Du kan använda $elemMatch
istället och det kommer att fungera, men det är frustrerande att MongoDB:s dokumentation inte varnar för det.
Jag skapade det här dokumentet:
{
"_id": "51cb12857124a215940cf2d4",
"level1": [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
],
"items": [
"item20",
"item21"
]
}
Lägg märke till att fältet "objekt" är en rad strängar och den här frågan fungerar perfekt:
db.nested.findOne({"items":{"$in":["item20"]} })
Nu är "level1.0" också en array av strängar, den enda skillnaden är att den finns i en annan array. Den här frågan borde fungera men är inte:
db.nested.findOne({"level1.0":{"$in":["item00"]} })
Det enda sättet att få resultatet är att använda $elemMatch:
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
Alltså $elemMatch
löser problemet, men den verkliga lösningen är att uppdatera MongoDBs dokumentation till att $in
fungerar inte för arrayer av arrayer. Du kanske borde skicka in en förfrågan till 10gen.