Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb最优查询_Mongodb_Aggregation Framework - Fatal编程技术网

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。它是非规范化结构,简化了流水线。