首页 > 解决方案 > 使用 Mongodb 和 Laravel 对键求和并按键分组

问题描述

拥有这个系列 -

{
    "_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"
}

我正在将 Laravel 5.5 与 MongoDB 一起使用

标签: mongodblaravellaravel-5

解决方案


这是一个工作MongoPlayground。查看 Mongo 对Aggregations的参考,以及$groupoperator

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

编辑:校对后,我不太确定这就是你要找的。此示例将返回每个状态的列表,id例如:

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

为此,我利用 运算符来根据它们的值$cond有条件地记录文档。一个缺点是您必须为每个值重复此操作。不确定解决方法。$sumstatus

关于 Laravel 实现,我绝对不是 Laravel 专家,但请查看这个答案,其中显示了如何访问该aggregate()方法的示例。


推荐阅读