【问题标题】:Aggregation on month level and year level, also find the average in MongoDB月级别和年级别的聚合,也在 MongoDB 中找到平均值
【发布时间】:2021-08-09 17:17:12
【问题描述】:

说明:我想求 2018、2021 和 2020 年值的平均值。年和月将使用查询参数传递。 另外,如果没有完整的年份,则在月级别上查找平均值,然后可以在月级别上进行平均值,月份也将从查询参数中传递。

从查询参数来看,如果用户给出月份作为参数,平均的结果是月份级别的。 IF用户给出一年或多年的聚合将年级

查询参数为下拉菜单

  • 时基选择器(月、年)
  • 年基选择器 2018,2015,2016....
  • 月份选择器(所有月份,12、11、...08、..03、01)

如果解释不清楚,请告诉我。提前致谢。

    {
  "data": {
    "2018-05-11": {
      "12": 12.4,
      "00": 11.3
    },
    "2018-12-31": {
      "12": 12.4,
      "06": 13
    },
    "2021-05-10": {
      "00": 11.3,
      "06": 13
    },
    "2021-05-11": {
      "12": 12.4,
      "00": 11.3,
      "06": 13
    },
    "2021-05-13": {
      "12": 6,
      "06": 13
    },
    "2020-06-01": {
      "12": 3.4,
      "09": 1.8
    },
    "2020-06-15": {
      "12": 3.9,
      "09": 11.8
    }
  }
}

【问题讨论】:

  • 我猜这是您的预期结果,您能否显示实际文档.. 并查询参数示例输入..
  • 感谢您的评论,是的,我可以告诉你,有一个下拉列表最近 3 年、最近 5 年、最近 10 年、最近 3 个月、最近 6 个月、最近 9 个月,在我的介意使用 MongoDB 月份和年份聚合,但不清楚如何使用这些值
  • 仍然不清楚,只需在您的问题中添加参数和可能的值,以及您在数据库中的示例文档,
  • 我已经发布的示例文档。 - 参数为下拉 - 时基选择器(月、年)- 年基选择器 2018、2015、2016 .... - 月基选择器(所有月份、12、11、... 08, ..03, 01)
  • data 密钥在收藏中可用吗?

标签: arrays mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:
  • $objectToArraydata 对象转换为数组键值格式
  • $filter 循环上述转换后的数组
  • 检查$and条件
  • $toDate 从字符串日期获取data
  • $month 从日期中选择月份,$year 选择年份
  • $in 如果月份在月份数组中并且年份在年份数组中,则检查条件
  • $arrayToObject从键值数组转回对象
var years = [2021];
var months = [5];
db.collection.aggregate([
  {
    $project: {
      data: {
        $arrayToObject: {
          $filter: {
            input: { $objectToArray: "$data" },
            cond: {
              $and: [
                { $in: [{ $year: { $toDate: "$$this.k" } }, years] },
                { $in: [{ $month: { $toDate: "$$this.k" } }, months] }
              ]
            }
          }
        }
      }
    }
  }
])

Playground

【讨论】:

  • 但是 2021 年的平均值在哪里?
  • 我只是改变了一点点数据结构,你现在可以检查一下吗? dateHoursAsKey 谢谢!
猜你喜欢
  • 2021-12-15
  • 2020-05-29
  • 1970-01-01
  • 2020-03-19
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 2012-08-05
相关资源
最近更新 更多