MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Consulta de matriz aninhada do MongoDB


Depois de executar algumas consultas, cheguei à conclusão de que $in não funciona para uma matriz de matrizes .

Você pode usar $elemMatch em vez disso e funcionará, mas é frustrante que a documentação do MongoDB não avise sobre isso.

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

Observe que o campo "items" é um array de strings e esta consulta funciona perfeitamente:
db.nested.findOne({"items":{"$in":["item20"]} })

Agora, "level1.0" também é um array de strings, a única diferença é que está dentro de outro array. Esta consulta deve funcionar, mas não é:
db.nested.findOne({"level1.0":{"$in":["item00"]} })

A única maneira de obter o resultado é usando $elemMatch:
db.nested.findOne({"level1":{"$elemMatch":{"$in":['item00']}} })

Então $elemMatch resolve o problema, mas a solução real é atualizar a documentação do MongoDB para afirmar que $in não funciona para matrizes de matrizes. Talvez você deva enviar uma solicitação para 10gen.