sql >> Database >  >> NoSQL >> MongoDB

MongoDB-query met elemMatch voor geneste arraygegevens

Uw vraag retourneert eenvoudigweg alle documenten die een modules bevatten element waar name == 'foo' . Om $elemMatch te gebruiken om de uitvoer te filteren, moet u deze gebruiken in het projectie-argument van de find aanroepen in plaats van een deel van de vraag:

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

Om beide concepten te combineren, kunt u verwijzen naar de index van het array-element dat in de query overeenkomt met $ :

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

Hoe dan ook keert terug:

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

Als u andere velden nodig heeft die in de uitvoer moeten worden opgenomen, voegt u deze toe aan het projectieobject (bijv. name: 1 ).




  1. Redis-wachtrij met claim verlopen

  2. Apache HBase-schrijfpad

  3. MongoDB voor elk()

  4. MongoDB Seattle 2014