We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
翻译原文:MongoDB 官方文档: SQL to Aggregation Mapping Chart 在上一篇翻译 从 SQL 到 MongoDB,这一篇就够了,我们详细讲解了 SQL 和 MongoDB 的一些概念的对应关系,方便大家入门和理解,这一篇属于进阶篇,主要讲解了 SQL 和 MongoDB 和 数据聚合 的对应关系。
翻译原文:MongoDB 官方文档: SQL to Aggregation Mapping Chart
在上一篇翻译 从 SQL 到 MongoDB,这一篇就够了,我们详细讲解了 SQL 和 MongoDB 的一些概念的对应关系,方便大家入门和理解,这一篇属于进阶篇,主要讲解了 SQL 和 MongoDB 和 数据聚合 的对应关系。
聚合管道 (aggregation pipeline ) 让 MongoDB 提供与 SQL 中的许多常见数据聚合操作相对应的,原生的聚合功能。
下表概述了常见的 SQL 聚合术语、函数和概念以及相应的 MongoDB 聚合操作符(aggregation operators):
有关所有聚合管道和表达式操作符的列表,请参见:Aggregation Pipeline Quick Reference。
另见:SQL to MongoDB Mapping Chart
下面提供了 SQL 聚合语句和相应的 MongoDB 语句,表中的例子假定以下条件:
orders
order_lineitem
order_lineitem.order_id
orders.id
join
{ 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 } ] }
计算所有 orders 记录数量:
SELECT COUNT(*) AS count FROM orders
db.orders.aggregate( [ { $group: { _id: null, count: { $sum: 1 } } } ] )
$sum
计算 orders 中 price 的总和:
price
SELECT SUM(price) AS total FROM orders
db.orders.aggregate( [ { $group: { _id: null, total: { $sum: "$price" } } } ] )
$group
对于每一个独特的 cust_id,计算 price 字段总和:
cust_id
SELECT cust_id, SUM(price) AS total FROM orders GROUP BY cust_id
db.orders.aggregate( [ { $group: { _id: "$cust_id", total: { $sum: "$price" } } } ] )
$sort
对于每一个独特的 cust_id,计算 price 字段总和,且结果按总和排序:
SELECT cust_id, SUM(price) AS total FROM orders GROUP BY cust_id ORDER BY total
db.orders.aggregate( [ { $group: { _id: "$cust_id", total: { $sum: "$price" } } }, { $sort: { total: 1 } } ] )
对于每一个独特的 cust_id,按照 ord_date 进行分组,且不包含日期的时间部分,计算 price 字段总和。
ord_date
SELECT cust_id, ord_date, SUM(price) AS total FROM orders GROUP BY cust_id, ord_date
db.orders.aggregate( [ { $group: { _id: { cust_id: "$cust_id", ord_date: { $dateToString: { format: "%Y-%m-%d", date: "$ord_date" }} }, total: { $sum: "$price" } } } ] )
$match
对于 cust_id 如果有多个记录,就返回 cust_id 以及相应的记录数量:
SELECT cust_id, count(*) FROM orders GROUP BY cust_id HAVING count(*) > 1
db.orders.aggregate( [ { $group: { _id: "$cust_id", count: { $sum: 1 } } }, { $match: { count: { $gt: 1 } } } ] )
对于每一个独特的 cust_id,且 status = ‘A’,计算 price 字段总和,只有在总和大于 250 的情况下,才可以返回。
status = ‘A’
SELECT cust_id, SUM(price) as total FROM orders WHERE status = 'A' GROUP BY cust_id HAVING total > 250
db.orders.aggregate( [ { $match: { status: 'A' } }, { $group: { _id: "$cust_id", total: { $sum: "$price" } } }, { $match: { total: { $gt: 250 } } } ] )
$unwind
对于每一个独特的 cust_id,对相应的行的 item 项求和得到 qty:
qty
SELECT cust_id, SUM(li.qty) as qty FROM orders o, order_lineitem li WHERE li.order_id = o.id GROUP BY cust_id
db.orders.aggregate( [ { $unwind: "$items" }, { $group: { _id: "$cust_id", qty: { $sum: "$items.qty" } } } ] )
将 cust_id, ord_date 分组并计算数量 ,不包括日期的时间部分。
SELECT COUNT(*) FROM (SELECT cust_id, ord_date FROM orders GROUP BY cust_id, ord_date) as DerivedTable
db.orders.aggregate( [ { $group: { _id: { cust_id: "$cust_id", ord_date: { $dateToString: { format: "%Y-%m-%d", date: "$ord_date" }} } } }, { $group: { _id: null, count: { $sum: 1 } } } ] )
另见
The text was updated successfully, but these errors were encountered:
No branches or pull requests
SQL to Aggregation Mapping Chart
聚合管道 (aggregation pipeline ) 让 MongoDB 提供与 SQL 中的许多常见数据聚合操作相对应的,原生的聚合功能。
下表概述了常见的 SQL 聚合术语、函数和概念以及相应的 MongoDB 聚合操作符(aggregation operators):
有关所有聚合管道和表达式操作符的列表,请参见:Aggregation Pipeline Quick Reference。
另见:SQL to MongoDB Mapping Chart
Examples
下面提供了 SQL 聚合语句和相应的 MongoDB 语句,表中的例子假定以下条件:
orders
和order_lineitem
,然后通过order_lineitem.order_id
和orders.id
进行join
操作。orders
包含以下原型的文档(documents):COUNT vs count
计算所有
orders
记录数量:SUM vs
$sum
计算
orders
中price
的总和:GROUP BY vs
$group
对于每一个独特的
cust_id
,计算price
字段总和:ORDER BY vs
$sort
对于每一个独特的
cust_id
,计算price
字段总和,且结果按总和排序:GROUP BY Multi
对于每一个独特的
cust_id
,按照ord_date
进行分组,且不包含日期的时间部分,计算price
字段总和。HAVING vs
$match
对于
cust_id
如果有多个记录,就返回cust_id
以及相应的记录数量:WHERE vs
$match
对于每一个独特的
cust_id
,且status = ‘A’
,计算price
字段总和,只有在总和大于 250 的情况下,才可以返回。$unwind
对于每一个独特的
cust_id
,对相应的行的 item 项求和得到qty
:Multi aggregate
将
cust_id
,ord_date
分组并计算数量 ,不包括日期的时间部分。另见
The text was updated successfully, but these errors were encountered: