sql >> Databáze >  >> NoSQL >> MongoDB

Dotaz MongoDB s elemMatch na data vnořených polí

Váš dotaz jednoduše vrací všechny dokumenty, které obsahují modules prvek kde name == 'foo' . Chcete-li použít $elemMatch k filtrování výstupu jej musíte použít v argumentu projekce find volání místo části dotazu:

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

Chcete-li zkombinovat oba koncepty, můžete odkazovat na index prvku pole shodného v dotazu pomocí $ :

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

V obou případech se vrátí:

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

Pokud potřebujete do výstupu zahrnout další pole, přidejte je do objektu projekce (např. name: 1 ).




  1. Redis:Je ZADD lepší než O(logN), když je vložený prvek na začátku nebo na konci?

  2. Plánování celerových úkolů s velkým ETA

  3. Jak může HBase v CDP využít Amazon S3

  4. Nějaké podrobné a konkrétní důvody proč je MongoDB mnohem rychlejší než SQL DB?