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

$projekce vs $elemMatch

Rozdíl v použití projekce je poněkud jemný. Ve vašem příkladu použití by to měly být ekvivalentní dotazy (z hlediska použití indexu), ale $elemMatch příklad zbytečně opakuje kritéria dotazu. $ projekce by byla pro tento příklad rozumnější volbou.

Zásadním rozdílem uvedeným v dokumentaci je pole omezení pole pro $ projekce:

Některé další poznámky k rozdílům v operátorech projekce níže ...

Polohový poziční ($ ) operátor projekce :

  • omezuje obsah pole pole, které je zahrnuto ve výsledcích dotazu, tak, aby obsahovalo první prvek, který odpovídá dokumentu dotazu.

  • vyžaduje, aby bylo odpovídající pole pole zahrnuto v kritériích dotazu

  • lze použít pouze v případě, že se v kritériích dotazu objeví jedno pole pole

  • lze v projekci použít pouze jednou

The $elemMatch operátor projekce

  • omezuje obsah pole pole, které je zahrnuto ve výsledcích dotazu, tak, aby obsahoval pouze první prvek pole, který odpovídá podmínce $elemMatch .

  • nevyžaduje, aby bylo odpovídající pole v kritériích dotazu

  • lze použít ke shodě více podmínek pro prvky pole, které jsou vloženými dokumenty

The $elemMatch operátor dotazu

Všimněte si, že existuje také $elemMatch dotazovací operátor, který provádí podobnou shodu, ale v dotazu spíše než v projekci výsledků. Není neobvyklé, že se toto používá v kombinaci s $ projekce.

Půjčení příkladu z dokumentů kde můžete použít obojí:

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. C# mongodb driver 2.0 - Jak upsert v hromadné operaci?

  2. Nainstalujte MongoDB Community Edition 4.0 na Linux

  3. Spusťte nativní dotaz mongodb pomocí ovladače java mongodb

  4. vložený dokument vs datový typ hash v mongoidu