On this page
SQL 到聚合的 Map 图
在本页面
aggregation pipeline允许 MongoDB 提供与 SQL 中许多常见数据聚合操作相对应的本机聚合功能。
下表概述了常见的 SQL 聚合术语,函数和概念以及相应的 MongoDB aggregation operators:
| SQL 术语,函数和概念 | MongoDB 聚合运算符 |
|---|---|
| WHERE | $match |
| GROUP BY | $group |
| HAVING | $match |
| SELECT | $project |
| ORDER BY | $sort |
| LIMIT | $limit |
| SUM() | $sum |
| COUNT() | $sum |
$sortByCount |
|
| join | $lookup |
有关所有聚合管道和表达式运算符的列表,请参见聚合管道快速参考。
See also
Examples
下表提供了 SQL 聚合语句和相应的 MongoDB 语句的快速参考。表格中的示例假定以下条件:
SQL 示例假定两个表
orders和order_lineitem通过order_lineitem.order_id和orders.id列连接。MongoDB 示例假定一个集合
orders包含以下原型的文档:
{
cust_id: "abc123",
ord_date: ISODate("2012-11-02T17:04:11.102Z"),
status: 'A',
price: 50,
items: [ { sku: "xxx", qty: 25, price: 1 },
{ sku: "yyy", qty: 25, price: 1 } ]
}
| SQL Example | MongoDB Example | Description |
|---|---|---|
| SELECT COUNT(*)个 AS 计数 | ||
FROM order |
db.orders.aggregate([ | |
| 39]) | 计算orders中的所有记录 |
|
| 选择总和(价格),总计 FROM order |
db.orders.aggregate([ | |
| 41]) | 求和orders |
中的price字段 |
| SELECT cust_id, 总和(价格)AS FROM orders GROUP BY cust_id |
db.orders.aggregate([ | |
| 44]) | 对于每个唯一的cust_id,求和price字段。 |
|
| SELECT cust_id, 总和(价格)AS FROM orders GROUP BY cust_id ORDER BY total |
db.orders.aggregate([ | |
| 47]) | 对于每个唯一的cust_id,对price字段求和,结果按和排序。 |
|
| SELECT cust_id, ord_date, 总和(价格)AS FROM orders GROUP BY cust_id, ord_date |
db.orders.aggregate( [ | |
| 50]) | 对于每个唯一的cust_id,ord_date分组,对price字段求和。不包括日期的时间部分。 |
|
| SELECT cust_id, count() FROM orders GROUP BY cust_id 正在计数()> 1 |
db.orders.aggregate([ | |
| 54]) | 对于具有多个记录的cust_id,返回cust_id和相应的记录计数。 |
|
| SELECT cust_id, ord_date, 总和(价格)AS FROM orders GROUP BY cust_id, ord_date 总计> 250 |
db.orders.aggregate([ | |
| 57]) | 对于每个唯一的cust_id,ord_date分组,对price字段求和,并仅在总和大于 250 的情况下返回。不包括日期的时间部分。 |
|
| SELECT cust_id, 总和(价格) FROM orders 状态=“ A” GROUP BY cust_id |
db.orders.aggregate([ | |
| 61]) | 对于状态为A的每个唯一cust_id,求和price字段。 |
|
| SELECT cust_id, 总和(价格) FROM orders 状态=“ A” GROUP BY cust_id 总计> 250 |
db.orders.aggregate([ | |
| 65]) | 对于每个具有状态A的唯一cust_id,对price字段求和,并仅在总和大于 250 的情况下返回。 |
|
| SELECT cust_id, SUM(li.qty)为数量 从订单 o, order_lineitem li 在哪里 li.order_id = o.id GROUP BY cust_id |
db.orders.aggregate([ | |
| 69]) | 对于每个唯一的cust_id,求和与订单相关联的相应订单项qty字段。 |
|
| SELECT COUNT(*) 从(选择 cust_id, ord_date FROM orders GROUP BY cust_id, ord_date) 如 DerivedTable |
db.orders.aggregate([ | |
| 72]) | 计算不同的cust_id,ord_date分组的数量。不包括日期的时间部分。 |