MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Abfrage mit elemMatch für verschachtelte Array-Daten

Ihre Abfrage gibt einfach alle Dokumente zurück, die modules enthalten Element wobei name == 'foo' . Um $elemMatch zu verwenden Um die Ausgabe zu filtern, müssen Sie es im Projektionsargument von find verwenden Rufen Sie anstelle eines Teils der Abfrage auf:

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

Um beide Konzepte zu kombinieren, können Sie mit $ auf den Index des in der Abfrage gefundenen Array-Elements verweisen :

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

So oder so wird zurückgegeben:

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

Wenn Sie andere Felder in der Ausgabe benötigen, fügen Sie sie dem Projektionsobjekt hinzu (z. B. name: 1 ).