首页 > 解决方案 > 如何计算和映射来自某个字段的数组

问题描述

我创建了一个简单的猫鼬查询来获取一组信息,然后对其进行排序。

const stats_m = await monthlySessions.find({}).sort({ month: 1 });

响应看起来像这样:

[
  {
    _id: 60c3dce8f27cc56bbcf20e94,
    steamID: '76561199105033642',
    displayName: 'username',
    LastJoinDate: 'Sat Jun 12 2021 01:00:04 GMT+0300 (Eastern European Summer Time)',
    LastLeaveDate: 'Sat Jun 12 2021 01:00:07 GMT+0300 (Eastern European Summer Time)',
    SessionTime: 14,
    UID: '60a6572b98a160df4ffc8b20',
    month: 5,
    year: '2021',
    __v: 0
  },
  {
    _id: 60c3ddda65e2073ea162cdfa,
    displayName: 'username',
    LastJoinDate: 'Sat Jun 12 2021 01:00:04 GMT+0300 (Eastern European Summer Time)',
    LastLeaveDate: 'Sat Jun 12 2021 01:00:07 GMT+0300 (Eastern European Summer Time)',
    SessionTime: 14,
    UID: '60a6572b98a160df4ffc8b20',
    month: 6,
    year: '2021',
    __v: 0,
    steamID: '76561199105033642'
  }
]

现在我需要做的是让每个对象都具有相同的字段值month,然后加SessionTime在一起,然后从中创建一个新对象,它只包含month, year,SessionTime

我该怎么做呢?

标签: javascriptnode.jsarraysmongodbmongoose

解决方案


您可以使用带有$group的聚合来执行此操作:

db.collection.aggregate([
  {
    $group: {
      _id: {
        month: "$month",
        year: "$year"
      },
      SessionTime: {
        $sum: "$SessionTime"
      },
  
    }
  },
  {
    $project: {
      _id: 0,
      month: "$_id.month",
      year: "$_id.year",
      SessionTime: 1
    }
  }
])

蒙古游乐场


推荐阅读