Arrays 月级和年级的聚合,也可以在MongoDB中找到平均值

Arrays 月级和年级的聚合,也可以在MongoDB中找到平均值,arrays,mongodb,mongoose,mongodb-query,aggregation-framework,Arrays,Mongodb,Mongoose,Mongodb Query,Aggregation Framework,解释:我想找到20182021和2020年值的平均值。年和月将使用查询参数传递。 此外,如果完整年份不可用,则在月份级别上查找平均值,然后在月份级别上查找平均值,该月份也将从查询参数中传递 从查询参数中,如果用户将月份作为参数,则平均值的结果为月份级别。 如果用户给出一年或多年,聚合将为年级别 查询参数如下拉列表所示 时基选择器(月、年) 年份基准选择器201820152016 月基准选择器(所有月份,12、11、…08、…03、01) 如果解释不清楚,请告诉我。提前谢谢 {

解释:我想找到20182021和2020年值的平均值。年和月将使用查询参数传递。 此外,如果完整年份不可用,则在月份级别上查找平均值,然后在月份级别上查找平均值,该月份也将从查询参数中传递

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

查询参数如下拉列表所示

  • 时基选择器(月、年)
  • 年份基准选择器201820152016
  • 月基准选择器(所有月份,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
    }
  }
}
  • $objectToArray
    数据
    对象转换为数组键值格式
  • $filter
    迭代上述转换数组的循环
  • 检查
    $和
    条件
  • $toDate
    从字符串日期获取
    数据
  • $month
    选择从日期算起的月份,
    $year
    选择年份
  • $in
    如果月份在月份数组中,年份在年份数组中,则签入条件
  • $arrayToObject
    从键值数组转换回对象

我想这是您的预期结果,您能出示实际文件吗。。和查询参数示例输入..谢谢评论,是的,我可以告诉你,有一个下拉列表过去3年、过去5年、过去10年、过去3个月、过去6个月、过去9个月,我想使用MongoDB月和年聚合,但不清楚如何使用这些值直到不清楚,只需在问题中添加参数和可能的值,以及数据库中的示例文档,我已经发布的示例文档<代码>-
参数为下拉列表
-
时基选择器(月、年)
-
年基选择器201820152016
-
月基选择器(所有月,12,11,…08,…03,01)这是收集中可用的
数据
键吗?但2021年的平均值在哪里?请发布您的预期结果..我只是更改了一点点数据结构,您现在可以检查吗?谢谢
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] }
              ]
            }
          }
        }
      }
    }
  }
])