使用Mongodb和Laravel对密钥求和并按密钥分组

时间:2018-07-19 14:16:02

标签: mongodb laravel laravel-5

拥有此收藏集-

{
    "_id": "5b508587de796c0006207fa7",
    "id": "1",
    "status": "pending",        
    "updated_at": "2018-07-19 13:02:40",
    "created_at": "2018-07-19 12:35:19"
},
{
    "_id": "5b508587de796c0006207fa5",
    "id": "2",
    "status": "completed",        
    "updated_at": "2018-07-19 13:02:40",
    "created_at": "2018-07-19 12:35:19"
},

我想要一个查询,该查询将通过 id 键将状态键相加。

例如-

{
  "id":"1",
  "pending":"1"
}

我在MongoDB上使用Laravel 5.5

1 个答案:

答案 0 :(得分:1)

这里是工作中的MongoPlayground。查看Mongo对Aggregations$group operator的引用。

db.collection.aggregate([
  {
    $group: {
      _id: "$status",
      sumOfStatus: {
        $sum: 1
      }
    }
  }
])

编辑:经过校对后,我不确定这是您要找的内容。此example将为您返回每个id的状态列表,例如:

[
  {
    "_id": "5",
    "completed": 3,
    "pending": 3
  }
]

为此,我利用$cond运算符,以便根据$sum的值来有条件地status个文档。一个缺点是您必须为每个值重复此操作。不确定是否可以解决这个问题。

关于Laravel的实现,我绝对不是Laravel专家,但是请查看此answer,它显示了有关如何访问aggregate()方法的示例。