Na wat zoekacties te hebben uitgevoerd, kwam ik tot de conclusie dat $in niet werkt voor een array van arrays .
U kunt $elemMatch
. gebruiken in plaats daarvan en het zal werken, maar het is frustrerend dat de documentatie van MongoDB er niet voor waarschuwt.
Ik heb dit document gemaakt:
{
"_id": "51cb12857124a215940cf2d4",
"level1": [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
],
"items": [
"item20",
"item21"
]
}
Merk op dat het veld "items" een reeks strings is en dat deze query perfect werkt:
db.nested.findOne({"items":{"$in":["item20"]} })
Nu is "level1.0" ook een array van strings, het enige verschil is dat het zich in een andere array bevindt. Deze zoekopdracht zou moeten werken, maar is niet:
db.nested.findOne({"level1.0":{"$in":["item00"]} })
De enige manier om het resultaat te krijgen is door $elemMatch te gebruiken:
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
Dus $elemMatch
lost het probleem op, maar de echte oplossing is om de documentatie van MongoDB bij te werken met de staten dat $in
werkt niet voor arrays van arrays. Misschien moet je een verzoek indienen bij 10gen.