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

Hvordan bruger man $elemMatch på aggregatets projektion?

Helt på et gammelt spørgsmål, men bogstaveligt talt er ingen af ​​de foreslåede svar gode.

TLDR :

Du kan ikke bruge $elemMatch i en $projektfase. men du kan opnå det samme resultat ved at bruge andre aggregeringsoperatorer som $filter.

db.itens.aggregate([
    {
        $project: {
            compList: {
               $filter: {
                input: "$complist",
                as: "item",
                cond: {$eq: ["$$item.a", 1]}
               }
            }
        }
    }
])

Og hvis du kun vil have det første element fra arrayet, der matcher betingelsen på samme måde som $elemMatch, kan du inkorporere $arrayElemAt

Udgående forklaring :

Lad os først forstå $elemMatch:

$elemMatch er et forespørgselsudtryk, mens også denne projektionsversion af det eksisterer, dette refererer til en forespørgselsprojektion og ikke $project aggregeringsstadiet.

Og hvad så? hvad har dette med noget at gøre? godt et $projektstadium har en bestemt inputstruktur, det kan have, mens det, vi vil bruge, er:

:

Hvad er et gyldigt udtryk?

Udtryk kan omfatte feltstier, literaler, systemvariabler, udtryksobjekter og udtryksoperatorer. Udtryk kan indlejres.

Så vi vil bruge en udtryksoperator, men som du kan se fra dokumentets $elemMatch er ikke en del af det. derfor er det ikke et gyldigt udtryk, der skal bruges i et aggregerings $project scene.



  1. Hvad er nyt i MongoDB 4.2

  2. Hånende database i node.js?

  3. Skal du aktivere MongoDB-journalisering?

  4. Hvilken er den bedste MongoDB GUI? - Opdatering 2019