[英]use of aggregate function in Laravel Lumen with Jessengers MongoDB
我有以下收藏:
[
{
"_id":"5fabdd45bf510000d7001430",
"application_id":27,
"employ_id":1,
"reason":"email",
"score":1800
},
{
"_id":"5fabdd50bf510000d7001431",
"application_id":28,
"employ_id":1,
"reason":"email",
"score":1800
},
{
"_id":"5fabdd5dbf510000d7001432",
"application_id":28,
"employ_id":2,
"reason":"email",
"score":1800
},
{
"_id":"5fabdd68bf510000d7001433",
"application_id":27,
"employ_id":2,
"reason":"email",
"score":1800
},
{
"_id":"5fabdd79bf510000d7001434",
"application_id":27,
"employ_id":2,
"reason":"facebook",
"score":1000
},
{
"_id":"5fabdd84bf510000d7001435",
"application_id":27,
"employ_id":1,
"reason":"facebook",
"score":1000
}
]
我想根據每個“原因”計算每個“employ_id”的分數。 例如,employee_id 對原因電子郵件的得分:3600 和對 facebook:1000
我正在使用 Laravel Lumen 和 Jessengers MongoDb 庫。
這是我的代碼:
Model::groupBy('employ_id')-get('reason','score');
雖然可能有點晚了,但我希望它有所幫助,據我所知,這是您可以在 mongodb 中執行的操作,
db.getCollection('yourcolection').aggregate([
{ $group :
{ _id : {employ_id:"$employ_id", reason:"$reason"},
count: {
$sum:"$score"
}
}}
])
它會回報你,
/* 1 */
{
"_id" : {
"employ_id" : 1,
"reason" : "facebook"
},
"count" : 1000
}
/* 2 */
{
"_id" : {
"employ_id" : 2,
"reason" : "facebook"
},
"count" : 1000
}
/* 3 */
{
"_id" : {
"employ_id" : 2,
"reason" : "email"
},
"count" : 3600
}
/* 4 */
{
"_id" : {
"employ_id" : 1,
"reason" : "email"
},
"count" : 3600
}
在模型中為 Laravel 使用 Jenssegers mongodb 寫,
$result = DB::collection('yourcollection')->raw(function($collection)
{
return $collection->aggregate([
[ '$group' => [
'_id' => [
'employ_id'=>"$employ_id",
'reason'=>"$reason"
],
'count' => [
'$sum' => "$score"
]
]
]
]);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.