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

有关所有聚合管道和表达式运算符的列表,请参见聚合管道快速参考

Examples

下表提供了 SQL 聚合语句和相应的 MongoDB 语句的快速参考。表格中的示例假定以下条件:

  • SQL 示例假定两个ordersorder_lineitem通过order_lineitem.order_idorders.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 ExampleMongoDB ExampleDescription
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_idord_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_idord_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_idord_date分组的数量。不包括日期的时间部分。