MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Requête de tableau imbriqué MongoDB

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.