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 分组的数量。不包括日期的时间部分。 |