Mongodb最优查询
我的用例不同。我试图将其映射到用户和订单,以便于理解 我必须为用户获取以下信息Mongodb最优查询,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我的用例不同。我试图将其映射到用户和订单,以便于理解 我必须为用户获取以下信息 For each department For each order type delivered count unique orders 唯一订单计数意味着用户可能订购了相同的产品,但对于相同的产品,该计数必须为1。我有后台逻辑,并通过重复订单ID识别 db.getCollection('user_orders').aggregate([{"u
For each department
For each order type
delivered count
unique orders
唯一订单计数意味着用户可能订购了相同的产品,但对于相同的产品,该计数必须为1。我有后台逻辑,并通过重复订单ID识别
db.getCollection('user_orders').aggregate([{"user_id":123},
{$group: {"_id": {"department":"$department", "order_type":"$order_type"},
"del_count":{$sum:"$del_count"},
"unique_order":{$addToSet:{"unique_order":"$unique_order"}}}},
{$project: {"_id":0,
"department":"$_id.department",
"order_type_name":"$_id.order_type",
"unique_order_count": {$size:"$unique_order"},
"del_count":"$del_count"
}},
{$group: {"_id":"$department",
order_types: {$addToSet:
{"order_type_name":"$order_type_name",
"unique_order_count": "$unique_order_count",
"del_count":"$del_count"
}}}}
])
对不起,我的查询格式
这个查询运行得非常好。我添加了第二个分组,以便将同一部门的所有订单类型的响应汇总在一起
我可以用更少的管道来做同样的事情吗?有效的方法?项目的
$project
阶段似乎是多余的,但它更多的是重构,而不是性能改进。您的简化管道可以如下所示:
db.getCollection('user_orders').aggregate([{$group: {"_id": {"department":"$department", "order_type":"$order_type"},
"del_count":{$sum:"$del_count"},
"unique_order":{$addToSet:{"unique_order":"$unique_order"}}}},
{$group: {"_id":"$_id.department",
order_types: {$addToSet:
{"order_type_name":"$_id.order_type",
"unique_order_count": {$size:"$unique_order"},
"del_count":"$del_count"
}}}}
])
为什么要使用MongoDB-like SQL?@Yahya请帮助我了解它看起来是怎样的SQL。它是非规范化结构,简化了流水线。