簡體   English   中英

在 Jessengers MongoDB 中使用 Laravel Lumen 中的聚合函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM