gpt4 book ai didi

arrays - MongoDB 中每年和每月的聚合

转载 作者:行者123 更新时间:2023-12-04 07:38:14 24 4
gpt4 key购买 nike

说明 : 我有一个数组名称作为代码,我有一个查询参数名称为 year (下拉列表 2016,2017,2018,2019,....)和 month下拉列表为 ( ALL ,01,02,03,04,05,06,07,08,09,10,11,12)。
CASE1:如果用户选择特定年份和特定月份,则获取 code相应地排列。
CASE2:如果用户选择特定年份和月份 所有 ,获取 code阵列完成年份。

{
"code":[
{
"k": "2016-06-18T18",
"v": 1
},
{
"k": "2016-06-18T21",
"v": 2
},
{
"k": "2016-07-19T00",
"v": 13
},
{
"k": "2015-06-19T03",
"v": 6
},
{
"k": "2015-07-19T06",
"v": 6
}
]
}
案例 1 预期输出 IF 用户选择 : 从年份下拉 : 2016 , 月份 : 06
{
"code":[
{
"k": "2016-06-18T18",
"v": 1
},
{
"k": "2016-06-18T21",
"v": 2
}
]
}
案例 2 预期输出 IF 用户选择 :从年份下拉:2016 年,月份: 所有 .
{
"code":[
{
"k": "2016-06-18T18",
"v": 1
},
{
"k": "2016-06-18T21",
"v": 2
},
{
"k": "2016-07-19T00",
"v": 13
},
]
}

最佳答案

  • 初始化请求参数
  • var year = req.year;
    var month = req.month;
  • 设置默认年份条件
  • var condition = [{
    $eq: [{ $substr: ["$$this.k", 0, 4] }, String(year)]
    }];
  • 检查月份是否可用而不是全部然后添加条件
  • if (month && month != "all") {
    condition.push({
    $eq: [{ $substr: ["$$this.k", 5, 2] }, String(month)]
    });
    }
  • $filter迭代代码循环并过滤以上准备好的条件
  • db.collection.aggregate([
    {
    $set: {
    code: {
    $filter: {
    input: "$code",
    cond: { $and: condition }
    }
    }
    }
    }
    ])
    Playground

    关于arrays - MongoDB 中每年和每月的聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67636505/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com