Efter at have kørt nogle forespørgsler kom jeg til den konklusion, at $in ikke virker for en række arrays .
Du kan bruge $elemMatch
i stedet, og det vil virke, men det er frustrerende, at MongoDBs dokumentation ikke advarer om det.
Jeg har oprettet dette dokument:
{
"_id": "51cb12857124a215940cf2d4",
"level1": [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
],
"items": [
"item20",
"item21"
]
}
Bemærk, at feltet "elementer" er en række strenge, og denne forespørgsel fungerer perfekt:
db.nested.findOne({"items":{"$in":["item20"]} })
Nu er "level1.0" også en række af strenge, den eneste forskel er, at den er inde i et andet array. Denne forespørgsel burde virke, men er ikke:
db.nested.findOne({"level1.0":{"$in":["item00"]} })
Den eneste måde at få resultatet på er at bruge $elemMatch:
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
Så $elemMatch
løser problemet, men den rigtige løsning er at opdatere MongoDBs dokumentation til at angive $in
virker ikke for arrays af arrays. Måske skulle du indsende en anmodning til 10gen.