sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB-fråga med elemMatch för kapslade arraydata

Din fråga returnerar helt enkelt alla dokument som innehåller en modules element där name == 'foo' . För att använda $elemMatch för att filtrera utgången måste du använda den i projektionsargumentet för find anrop istället för en del av frågan:

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

För att kombinera båda begreppen kan du referera till indexet för arrayelementet som matchas i frågan med $ :

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

Hur som helst returnerar:

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

Om du behöver andra fält inkluderade i utdata, lägg till dem i projektionsobjektet (t.ex. name: 1 ).




  1. Bästa modellen för att representera många till många relationer med attribut i MongoDB

  2. Behöver jag uttryckligen stänga anslutningen?

  3. Redis kö med anspråk löper ut

  4. Redis och Memcache eller bara Redis?