我正在尝试将查询从mysql转换为mongodb
在MySql中,我使用:
$top_orders = Orders::find(array(
"columns" =>"pro_id",
"group"=>"pro_id",
"having"=>"count(pro_id) > 100",
"order"=>"RAND()",
"limit"=>5
)
);
与此并没有直接的关联,但是最接近的是通过实现Collection中的gregation()方法。
$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” total。$project
如果您认为需要在输出中使用特定名称,也可以使用更改字段。该$group
管道需要一个“关键”的_id
,因此通常是在最佳性能方面的考虑见好就收单独。
因此,基本步骤,如果你能忍受它是$group
,$match
,$sort
和$limit
。这些都是聚合流水线阶段,这是MongoDB像DSL这样的SQL一样无法将其很好地转换为任何实现的通用方式find()
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句