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

Consulta MongoDB com elemMatch para dados de matriz aninhada


Sua consulta está simplesmente retornando todos os documentos que contêm um modules elemento onde name == 'foo' . Para usar $elemMatch para filtrar a saída, você precisa usá-la no argumento de projeção do find call em vez de parte da consulta:
db.test.find({}, {modules: {$elemMatch: {name: 'foo'}}})

Para combinar os dois conceitos, você pode fazer referência ao índice do elemento array correspondente na consulta com $ :
db.test.find({modules: {$elemMatch: {name: 'foo'}}}, {'modules.$': 1})

De qualquer forma retorna:
{
  "_id": ObjectId("..."),
  "modules": [
    {
      "name": "foo",
      "mandatory": false,
      "group": [
        {
          "name": "g1"
        }
      ]
    }
  ]
}

Se você precisar de outros campos incluídos na saída, adicione-os ao objeto de projeção (por exemplo, name: 1 ).