You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB聚合中如何使用substring子串对日期字段做比较筛选

MongoDB 聚合按日期子串筛选实现

你可以直接在$filter的判断条件中使用$substrCP字符串截取算子提取TIME字段的年月片段,再和目标子串做相等比对即可,不需要修改其他聚合阶段逻辑。

你的TIME字段存储格式为DD-MM-YYYY HH:mm:ss,要提取MM-YYYY格式的子串,截取起始位置为索引3(字符串索引从0开始计数,前3位为DD-),截取长度为7,刚好得到对应年月片段。

修改后的完整聚合代码如下:

db.customers.aggregate([{
    $match: {
        "CDF.UTILITYTYPE.D1.G1" : "12387835"
    }   
},  {
        $project: {
         _id:0, 
         "CDF.UTILITYTYPE.D1.G22.NAME":1, 
         "CDF.UTILITYTYPE.D1.G1":1,
         "CDF.UTILITYTYPE.D5.EVENT": {
            $filter: {
               input: "$CDF.UTILITYTYPE.D5.EVENT",
               as: "item",
               cond: { 
                   $eq: [ 
                       // 从索引3开始截取7位,得到MM-YYYY格式子串
                       { $substrCP: [ "$$item.TIME", 3, 7 ] }, 
                       "06-2022" 
                   ] 
               }
            }
         }
      }
    }
]).pretty();

注意事项

  • 如果你的TIME字段存在非标准长度的字符串存储,建议先在$match阶段加字段存在性、格式校验逻辑,避免截取结果不符合预期
  • 若存储的日期字符串全为ASCII字符,$substrCP可以替换为$substrBytes,执行效率没有差异
  • 如果后续需要匹配其他年月,直接替换$eq中第二个参数的目标子串即可,不需要调整截取参数

内容的提问来源于stack exchange,提问作者Aksheet-Goku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 17:21:33