如何在 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()
.
上实现的任何东西
我正在尝试将查询从 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()
.