对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

群组和总数据

本教程说明了如何构建聚合管道、对集合执行聚合以及使用您选择的语言显示结果。

本教程演示如何对客户订单数据群组和分析。结果显示在 2020 购买商品的客户列表,并包括每个客户的 2020 订单历史记录。

聚合管道执行以下操作:

  • 根据字段值匹配文档子集

  • 按公共字段值对文档进行分组

  • 为每个结果文档添加计算字段


➤ 使用右上角的 Select your 语言)下拉菜单设立以下示例的语言,或选择MongoDB Shell。


此示例使用 orders集合,其中包含描述单个产品订单的文档。由于每个订单只对应一个客户,因此聚合按 customer_id字段(包含客户电子邮件地址)对订单文档进行分组。

要创建 orders 集合,请使用 insertMany() 方法:

db.orders.deleteMany({}) db.orders.insertMany( [ { customer_id: "elise_smith@myemail.com", orderdate: new Date("2020-05-30T08:35:52Z"), value: 231, }, { customer_id: "elise_smith@myemail.com", orderdate: new Date("2020-01-13T09:32:07Z"), value: 99, }, { customer_id: "oranieri@warmmail.com", orderdate: new Date("2020-01-01T08:25:37Z"), value: 63, }, { customer_id: "tj@wheresmyemail.com", orderdate: new Date("2019-05-28T19:13:32Z"), value: 2, }, { customer_id: "tj@wheresmyemail.com", orderdate: new Date("2020-11-23T22:56:53Z"), value: 187, }, { customer_id: "tj@wheresmyemail.com", orderdate: new Date("2020-08-18T23:04:48Z"), value: 4, }, { customer_id: "elise_smith@myemail.com", orderdate: new Date("2020-12-26T08:55:46Z"), value: 4, }, { customer_id: "tj@wheresmyemail.com", orderdate: new Date("2021-02-29T07:49:32Z"), value: 1024, }, { customer_id: "elise_smith@myemail.com", orderdate: new Date("2020-10-03T13:49:44Z"), value: 102, }] )

以下步骤演示了如何创建和运行聚合管道以对文档群组并计算新字段。

1
db.orders.aggregate( [ // Stage 1: Match orders in 2020 { $match: { orderdate: { $gte: new Date("2020-01-01T00:00:00Z"), $lt: new Date("2021-01-01T00:00:00Z"), } } }, // Stage 2: Sort orders by date { $sort: { orderdate: 1 } }, // Stage 3: Group orders by email address { $group: { _id: "$customer_id", first_purchase_date: { $first: "$orderdate" }, total_value: { $sum: "$value" }, total_orders: { $sum: 1 }, orders: { $push: { orderdate: "$orderdate", value: "$value" } } } }, // Stage 4: Sort orders by first order date { $sort: { first_purchase_date: 1 } }, // Stage 5: Display the customers' email addresses { $set: { customer_id: "$_id" } }, // Stage 6: Remove unneeded fields { $unset: ["_id"] }] )
2

该聚合返回来自 2020 的客户订单的以下摘要。结果文档包含给定客户下的所有订单的详细信息,按客户的电子邮件解决分组。

{ first_purchase_date: ISODate("2020-01-01T08:25:37.000Z"), total_value: 63, total_orders: 1, orders: [ { orderdate: ISODate("2020-01-01T08:25:37.000Z"), value: 63 } ], customer_id: 'oranieri@warmmail.com'}{ first_purchase_date: ISODate("2020-01-13T09:32:07.000Z"), total_value: 436, total_orders: 4, orders: [ { orderdate: ISODate("2020-01-13T09:32:07.000Z"), value: 99 }, { orderdate: ISODate("2020-05-30T08:35:52.000Z"), value: 231 }, { orderdate: ISODate("2020-10-03T13:49:44.000Z"), value: 102 }, { orderdate: ISODate("2020-12-26T08:55:46.000Z"), value: 4 } ], customer_id: 'elise_smith@myemail.com'}{ first_purchase_date: ISODate("2020-08-18T23:04:48.000Z"), total_value: 191, total_orders: 2, orders: [ { orderdate: ISODate("2020-08-18T23:04:48.000Z"), value: 4 }, { orderdate: ISODate("2020-11-23T22:56:53.000Z"), value: 187 } ], customer_id: 'tj@wheresmyemail.com'}
选择您的语言
给本页内容打分