Après avoir exécuté quelques requêtes, je suis arrivé à la conclusion que $in ne fonctionne pas pour un tableau de tableaux .
Vous pouvez utiliser $elemMatch
à la place et cela fonctionnera, mais il est frustrant que la documentation de MongoDB n'en avertisse pas.
J'ai créé ce document :
{
"_id": "51cb12857124a215940cf2d4",
"level1": [
[
"item00",
"item01"
],
[
"item10",
"item11"
]
],
"items": [
"item20",
"item21"
]
}
Notez que le champ "items" est un tableau de chaînes et cette requête fonctionne parfaitement :
db.nested.findOne({"items":{"$in":["item20"]} })
Maintenant, "level1.0" est également un tableau de chaînes, la seule différence est qu'il se trouve dans un autre tableau. Cette requête devrait fonctionner mais n'est pas :
db.nested.findOne({"level1.0":{"$in":["item00"]} })
La seule façon d'obtenir le résultat est d'utiliser $elemMatch :
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })
Donc $elemMatch
résout le problème, mais la vraie solution est de mettre à jour la documentation de MongoDB pour indiquer que $in
ne fonctionne pas pour les tableaux de tableaux. Peut-être devriez-vous soumettre une demande à 10gen.