sql >> Base de Datos >  >> NoSQL >> MongoDB

Consulta de matriz anidada MongoDB

Después de ejecutar algunas consultas, llegué a la conclusión de que $in no funciona para una matriz de matrices .

Puedes usar $elemMatch en cambio, funcionará, pero es frustrante que la documentación de MongoDB no advierta al respecto.

Creé este documento:

{
      "_id": "51cb12857124a215940cf2d4",
      "level1": [
        [
          "item00",
          "item01"
        ],
        [
          "item10",
          "item11"
        ]
      ],
      "items": [
        "item20",
        "item21"
      ]
}

Tenga en cuenta que el campo "elementos" es una matriz de cadenas y esta consulta funciona perfectamente:

db.nested.findOne({"items":{"$in":["item20"]} })

Ahora, "level1.0" también es una matriz de cadenas, la única diferencia es que está dentro de otra matriz. Esta consulta debería funcionar pero no lo es:

db.nested.findOne({"level1.0":{"$in":["item00"]} })

La única forma de obtener el resultado es usando $elemMatch:

db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })

Entonces $elemMatch resuelve el problema, pero la solución real es actualizar la documentación de MongoDB para indicar que $in no funciona para matrices de matrices. Quizás debería enviar una solicitud a 10gen.