0
作爲蒙戈文檔中描述: 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
以及等效蒙戈聚合查詢如下:
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'是一個嵌入式文檔。因此,當您使用訂單項目保存訂單文檔時,建立這種關係。您可以$'放開'$ items'和'$ group'來計算其字段的'$ sum'。 – Veeram
添加到Veeram的評論;所提供的sql查詢是誤導性的,因爲WHERE子句應該是一個ON子句,作爲兩個sql表之間連接的一部分。一旦你意識到只有一個連接,並且沒有真正的WHERE子句,這就解釋了爲什麼你不需要等價的$匹配。 –