Dela via


Komma igång med aggregeringspipelinen

Aggregeringspipelinen är ett kraftfullt verktyg som gör det möjligt för utvecklare att utföra avancerad dataanalys och manipulering på sina samlingar. Pipelinen är en sekvens av databearbetningsåtgärder som utförs på indatadokumenten för att skapa en beräknad utdata. Pipelinestegen bearbetar indatadokumenten och skickar resultatet till nästa steg. Varje steg utför en specifik åtgärd på data, till exempel filtrering, gruppering, sortering och transformering.

Grundläggande syntax

Den grundläggande syntaxen för en aggregeringspipeline är följande:

db.collection.aggregate([    { stage1 },    { stage2 },    ...    { stageN }])

Där db.collection är den MongoDB-samling som du vill utföra aggregeringen på, och steg1, steg 2, ..., stageN är de pipelinefaser som du vill tillämpa.

Exempelfaser

Cosmos DB for MongoDB innehåller ett brett utbud av steg som du kan använda i din pipeline, inklusive:

  • $match: Filtrerar dokumenten så att de endast skickar de dokument som matchar det angivna villkoret.
  • $project: Omvandlar dokumenten till ett nytt formulär genom att lägga till, ta bort eller uppdatera fält.
  • $group: Grupperar dokument efter ett eller flera fält och utför olika mängdfunktioner på grupperade data.
  • $sort: Sorterar dokumenten baserat på de angivna fälten.
  • $skip: Hoppar över det angivna antalet dokument.
  • $limit: Begränsar antalet dokument som skickas till nästa steg.
  • $unwind: Dekonstruerar ett matrisfält från indatadokumenten för att mata ut ett dokument för varje element.

Information om hur du visar alla tillgängliga faser finns i funktioner som stöds

Exempel

Här följer några exempel på hur du kan använda aggregeringspipelinen för att utföra olika åtgärder på dina data:

Filtrering: Om du vill filtrera dokument som har ett "kvantitetsfält" större än 20 kan du använda följande pipeline:

db.collection.aggregate([
    { $match: { quantity: { $gt: 20 } } }
])

Gruppering: Om du vill gruppera dokument efter fältet "kategori" och beräkna det totala antalet för varje grupp kan du använda följande pipeline:

db.collection.aggregate([
    { $group: { _id: "$category", totalQuantity: { $sum: "$quantity" } } }
])

Sortering: Om du vill sortera dokument efter fältet "pris" i fallande ordning kan du använda följande pipeline:

db.collection.aggregate([
    { $sort: { price: -1 } }
])

Transformering: Om du vill lägga till ett nytt fält "rabatt" i dokument som har ett "pris" större än 100 kan du använda följande pipeline:

db.collection.aggregate([
    { $project: { item: 1, price: 1, discount: { $cond: [{ $gt: ["$price", 100] }, 10, 0 ] } } }
])

Varva ned: Om du vill separera alla underdokument från matrisfältet "taggar" och skapa ett nytt dokument för varje värde kan du använda följande pipeline:

db.collection.aggregate([
    { $unwind: "$tags" }
])

Exempel med flera faser

db.sales.aggregate([
  { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } },
  { $group: { _id: "$category", totalSales: { $sum: "$sales" } } },
  { $sort: { totalSales: -1 } },
  { $limit: 5 }
])

I det här exemplet använder vi en exempelsamling med namnet "sales" som innehåller dokument med följande fält: "date", "category" och "sales".

Den första fasen { $match: { datum: { $gte: "2021-01-01", $lt: "2021-03-01" } } } } filtrerar dokumenten efter fältet "datum" och skickar bara dokument med ett datum mellan 1 januari 2021 och 28 februari 2021. Vi använder ett strängdatumformat med formatet "ÅÅÅÅ-MM-DD".

Det andra steget { $group: { _id: "$category", totalSales: { $sum: "$sales" } } } } grupperar dokumenten efter fältet "kategori" och beräknar den totala försäljningen för varje grupp.

Den tredje fasen { $sort: { totalSales: -1 } } sorterar dokumenten efter fältet "totalSales" i fallande ordning.

Det fjärde steget { $limit: 5 } begränsar antalet dokument som skickas till nästa steg till endast de 5 översta.

Därför returnerar pipelinen de 5 främsta kategorierna efter total försäljning för det angivna datumintervallet.

Nästa steg