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

$projektion vs $elemMatch

Forskellen i projektionsbrug er noget subtil. I dit eksempelbrug skal disse være tilsvarende forespørgsler (med hensyn til indeksbrug), men $elemMatch eksempel gentager forespørgselskriterierne unødigt. $ projektion ville være et mere fornuftigt valg for dette eksempel.

En væsentlig forskel bemærket i dokumentationen er arrayet feltbegrænsning for $ projektioner:

Nogle yderligere bemærkninger om forskellene i projektionsoperatorerne nedenfor ...

Den positionelle ($ ) projektionsoperatør :

  • begrænser indholdet af et matrixfelt, der er inkluderet i forespørgselsresultaterne, til at indeholde det første element, der matcher forespørgselsdokumentet.

  • kræver, at det matchende matrixfelt er inkluderet i forespørgselskriterierne

  • kan kun bruges, hvis et enkelt matrixfelt vises i forespørgselskriterierne

  • kan kun bruges én gang i en projektion

$elemMatch projektionsoperatør

  • begrænser indholdet af et matrixfelt, der er inkluderet i forespørgselsresultaterne til kun at indeholde det første matrixelement der matcher $elemMatch-betingelsen .

  • kræver ikke, at det matchende array er i forespørgselskriterierne

  • kan bruges til at matche flere betingelser for array-elementer, der er indlejrede dokumenter

$elemMatch forespørgselsoperatør

Bemærk, at der også er en $elemMatch forespørgselsoperator, som udfører lignende matchning, men i forespørgslen i stedet for resultatprojektionen. Det er ikke ualmindeligt at se dette brugt i kombination med en $ projektion.

Lån af et eksempel fra dokumenterne hvor du kan bruge begge dele:

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. Sammenlign to objektarrays og kontroller, om de har fælles elementer

  2. Sådan opretter du sessioner i Node.js

  3. Datafragmentering i mongo-indsamling

  4. Slap af og derefter gruppesammenlægning i MongoDB C#