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

Consulta MongoDB con elemMatch para datos de matriz anidada

Su consulta simplemente devuelve todos los documentos que contienen modules elemento donde name == 'foo' . Para usar $elemMatch para filtrar la salida, debe usarla en el argumento de proyección de find llamar en lugar de parte de la consulta:

db.test.find({}, {modules: {$elemMatch: {name: 'foo'}}})

Para combinar ambos conceptos, puede hacer referencia al índice del elemento de matriz coincidente en la consulta con $ :

db.test.find({modules: {$elemMatch: {name: 'foo'}}}, {'modules.$': 1})

De cualquier manera devuelve:

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

Si necesita incluir otros campos en la salida, agréguelos al objeto de proyección (por ejemplo, name: 1 ).