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.