我需要在laravel框架工作中获得以下查询的结果(使用jenssegers库)
db.product.aggregate({ $group : {_id : "$catid", total : { $sum : 1}}},
{$sort:{total:-1}});
我试着像这样做
return DB::connection($this - > connection)- >
collection($this - > collection) - > aggregate(
'{ $group : {_id : "$catid", total : { $sum : 1 }}},{$sort:{total:-1}}'');
但它给出的错误如“ErrorException Undefined index:aggregate”需要知道如何使用mongodb“db.collection.aggregate”
我收藏的文件就像这样
{
"_id": ObjectId("5369d68611fe14ddc5f59ff9"),
"sku": 123456,
"productid": 1,
"name": "name1",
"catid": 1
}
答案 0 :(得分:5)
您可以通过raw()
函数访问Jenssegers库中的聚合方法。
以下是我使用的工作随机聚合调用示例,您可以根据自己的需要进行调整:
//Perform an aggregate function and get a cursor
$cursor = Data::raw()->aggregate([
['$group' =>
['_id' => '$name', 'count' => ['$sum' => 1]]
],
['$sort' => ['count' => -1]],
['$limit' => 30],
['$project' => ['_id' => 0,
'text' => '$_id',
'size' => '$count',
]
],
]);
//Iterate your cursor
$current = $cursor;
do {
echo $current; //Process each element
} while (!($current = $cursor->next()));
请注意,使用raw()
方法需要使用游标,因为它是一个低级别的调用。
希望它有所帮助。
答案 1 :(得分:-1)
尝试这样的事情
db.product.aggregate(
{ "$group" :
{ "_id" : "$catid",
"total" : { "$sum" : 1}
}
},
{ "$sort" : {"productid":-1} }
);