如何在 phalcon 中将 "group by"、"having" 查询从 mysql 转换为 mongodb

How to convert "group by", "having" query from mysql to mongodb in phalcon

我正在尝试将查询从 mysql 转换为 mongodb

在 MySql 我使用:

$top_orders = Orders::find(array(
                    "columns" =>"pro_id",
                    "group"=>"pro_id",
                    "having"=>"count(pro_id) > 100",
                    "order"=>"RAND()",
                    "limit"=>5
                )
            );

与此并没有真正的直接关联,但最接近的是通过实施 Collection 的 aggregate() 方法。

$top_orders = Orders::aggregate(array(
   array( '$group' => array( 
       '_id' => '$pro_id',
       'count' => array( '$sum' => 1 )
   )),
   array( '$match' => array( 
       'count' => array( '$gt' => 100 )
   )),
   array( '$sort' => array( 'count' => -1 ) ),
   array( '$limit' => 5 )
));

如您所见,缺少的部分是您的 RAND() 函数,在 MongoDB 聚合查询中没有直接替代以在聚合管道中生成这样的随机数。

然而,您可以按照我在此处为示例所做的操作,并根据您提供的内容进行排序,例如 tge "count" 总计。您还可以使用 $project to alter fields if you think you need specific names on output. The $group pipeline requires a "key" as _id 因此通常出于最佳性能的考虑不理会它。

因此,如果您可以接受,基本步骤是 $group, $match, $sort and $limit。这些都是聚合管道阶段,这是 MongoDB 作为 SQL 的一般方式,就像 DSL 不能很好地转化为在 find().

上实现的任何东西