MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

$projection vs $elemMatch

Różnica w korzystaniu z projekcji jest nieco subtelna. W przykładowym użyciu powinny to być równoważne zapytania (pod względem użycia indeksu), ale $elemMatch przykład niepotrzebnie powtarza kryteria zapytania. $ projekcja byłaby bardziej rozsądnym wyborem dla tego przykładu.

Istotną różnicą odnotowaną w dokumentacji jest tablica ograniczenie pola dla $ projekcje:

Kilka dalszych uwag na temat różnic w operatorach projekcji poniżej ...

pozycyjny ($ ) operator projekcji :

  • ogranicza zawartość pola tablicy, która jest zawarta w wynikach zapytania, tak aby zawierała pierwszy element pasujący do dokumentu zapytania.

  • wymaga, aby pasujące pole tablicy było uwzględnione w kryteriach zapytania

  • można użyć tylko wtedy, gdy w kryteriach zapytania pojawia się jedno pole tablicy

  • można użyć tylko raz w projekcji

$elemMatch operator projekcji

  • ogranicza zawartość pola tablicy, która jest zawarta w wynikach zapytania, aby zawierała tylko pierwszy element tablicy spełniający warunek $elemMatch .

  • nie wymaga, aby pasująca tablica znajdowała się w kryteriach zapytania

  • może być użyty do dopasowania wielu warunków dla elementów tablicy, które są dokumentami osadzonymi

$elemMatch operator zapytania

Zauważ, że istnieje również $elemMatch operator zapytania, który wykonuje podobne dopasowanie, ale w zapytaniu, a nie w projekcji wyników. Często zdarza się, że jest to używane w połączeniu z $ projekcja.

Pożyczanie przykładu z dokumentów gdzie możesz użyć obu:

db.students.find(
    // use $elemMatch query operator to match multiple criteria in the grades array
    { grades: {
        $elemMatch: {
            mean:  { $gt: 70 },
            grade: { $gt: 90 }
        }
    }},

    // use $ projection to get the first matching item in the "grades" array
    { "grades.$": 1 }
)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Node js Mongodb Query NumberLong

  2. Mutex z MongoDB

  3. Jak pobrać dane z istniejącej bazy MongoDB?

  4. Ustaw hasło do bazy danych mongo meteor

  5. Jak zaktualizować wiele pól obiektu tablicy za pomocą jednego żądania?