Как преобразовать & quot; группу по & quot ;, & quot; имеющую & quot; запрос от mysql к mongodb в phalcon

Я пытаюсь преобразовать запрос из MySQL в Mongodb

В MySql я использую:

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

2

Решение

На самом деле нет прямой связи с этим, но самое близкое, что вы можете получить, это реализовать метод 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» total. Вы также можете использовать $project изменить поля, если вы думаете, что вам нужны конкретные имена на выходе. $group трубопровод требует «ключ», как _id поэтому, как правило, лучше всего оставить это в покое.

Таким образом, основные шаги, если вы можете жить с этим, являются $group, $match, $sort а также $limit. Все это этапы конвейерного агрегации, и это общий способ, которым MongoDB делает это как SQL-подобный DSL, плохо переводится на что-либо реализованное на find(),

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]