繁体   English   中英

如何获取MongoDB中每个月的最后一个值?

[英]How to get the last value of every month in MongoDB?

我的数据库中有三个字段iddateqty 我想按id对它们进行分组,并找到每个月的最新qty 所以对于每个月,每个月的最后一天的date ,都会返回它的qty

如果输入是

[
  {
    "id": "ABC",
    "date": "2020-10-02 15:03:00.00",
    "qty": 500,
  },
  {
    "id": "ABC",
    "date": "2020-10-31 20:22:00.00",
    "qty": 100,
  },
  {
    "id": "ABC",
    "date": "2020-11-03 04:22:00.00",
    "qty": 200,
  },
  {
    "id": "ABC",
    "date": "2020-11-18 04:22:00.00",
    "qty": 50,
  },
  {
    "id": "ABC1",
    "date": "2020-11-05 04:22:00.00",
    "qty": 5000,
  },
  {
    "id": "ABC1",
    "date": "2020-11-15 04:22:00.00",
    "qty": 4580,
  },
]

那么 output 应该是

[
  {
    "id": "ABC",
    "qtys": [
      {
        "date": "2020-10-31 20:22:00.00",
        "qty": 100
      },
      {
        "date": "2020-11-18 04:22:00.00",
        "qty": 50
      }
    ]
  },
  {
    "id": "ABC1",
    "qtys": [
      {
        "date": "2020-11-15 04:22:00.00",
        "qty": 4580
      }
    ]
  },
]
  • $addFieldsdate字段从字符串类型转换为日期类型,如果它已经是日期类型,则忽略此阶段
  • $sortdate降序排序
  • 使用$year$monthdate字段中提取后的$group by idmonthyear以获取第一个文档
  • $group by only id并在qtys中构造数量数组
db.collection.aggregate([
  { $addFields: { date: { $toDate: "$date" } } },
  { $sort: { date: -1 } },
  {
    $group: {
      _id: {
        id: "$id",
        month: { $month: "$date" },
        year: { $year: "$date" }
      },
      qtys: { $first: { date: "$date", qty: "$qty" } }
    }
  },
  {
    $group: {
      _id: "$_id.id",
      qtys: { $push: "$qtys" }
    }
  }
])

操场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM