MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Query MongoDB con elemMatch per dati array nidificati

La tua query sta semplicemente restituendo tutti i documenti che contengono un modules elemento dove name == 'foo' . Per usare $elemMatch per filtrare l'output, devi usarlo nell'argomento di proiezione di find chiama invece di una parte della query:

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

Per combinare entrambi i concetti, puoi fare riferimento all'indice dell'elemento dell'array corrispondente nella query con $ :

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

In entrambi i casi restituisce:

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

Se hai bisogno di altri campi inclusi nell'output, aggiungili all'oggetto di proiezione (es. name: 1 ).