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

MongoDB-forespørgsel med elemMatch til indlejrede array-data

Din forespørgsel returnerer simpelthen alle dokumenter, der indeholder et modules element hvor name == 'foo' . For at bruge $elemMatch for at filtrere outputtet skal du bruge det i projektionsargumentet for find ring i stedet for en del af forespørgslen:

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

For at kombinere begge begreber kan du referere til indekset for matrixelementet, der matches i forespørgslen med $ :

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

Uanset hvad returnerer:

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

Hvis du har brug for andre felter inkluderet i outputtet, skal du tilføje dem til projektionsobjektet (f.eks. name: 1 ).




  1. MongoDB-adgangskode med @ i

  2. Kan MongoDB bruge et indeks, når man tjekker for eksistensen af ​​et felt med $exists-operatoren?

  3. Kan mongorestore tage et enkelt url-argument i stedet for separate argumenter?

  4. Mongoose opdatering/upsert?