【发布时间】:2017-09-21 01:49:47
【问题描述】:
如 mongo 文档中所述: https://docs.mongodb.com/manual/reference/sql-aggregation-comparison/
有以下SQL查询的查询:
SELECT cust_id,
SUM(li.qty) as qty
FROM orders o,
order_lineitem li
WHERE li.order_id = o.id
GROUP BY cust_id
而等效的mongo聚合查询如下:
db.orders.aggregate( [
{ $unwind: "$items" },
{
$group: {
_id: "$cust_id",
qty: { $sum: "$items.qty" }
}
}
] )
但是,查询按预期工作正常。我的问题,为什么 SQL 中对应的 WHERE 子句没有 $match 子句? $unwind 如何补偿 $match 子句?
【问题讨论】:
-
您的架构已经处理了
WHERE li.order_id = o.id,因为现在$items是一个嵌入文档的订单文档。因此,当您保存带有订单项目的订单文档时,就会建立这种关系。你$unwind$items和$group来计算其字段的$sum。 -
添加到 Veeram 的评论中;所示的 sql 查询具有误导性,因为 WHERE 子句实际上应该是一个 ON 子句,作为两个 sql 表之间连接的一部分。一旦你意识到只有一个连接,没有真正的 WHERE 子句,这就解释了为什么你不需要一个等价的 $match。
标签: mongodb mongodb-query aggregation-framework