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

MongoDB多嵌套文档中识别长度>10的错误日期字符串

MongoDB 识别并输出含超长dateP字段的文档结果

要从MongoDB集合中筛选出包含长度超过10字符的错误dateP日期字符串的文档,并输出指定格式的结果,可以使用聚合管道处理嵌套文档结构,具体实现如下:

聚合管道脚本

db.yourCollectionName.aggregate([
  // 展开_a数组,处理每个元素
  { $unwind: "$_a" },
  // 只保留包含_p字段的_a元素
  { $match: { "_a._p": { $exists: true } } },
  // 将_p.s转换为键值对数组,统一遍历a、c等子字段
  {
    $project: {
      f: 1,
      ps: { $objectToArray: "$_a._p.s" }
    }
  },
  // 展开ps键值对数组
  { $unwind: "$ps" },
  // 展开每个子字段下的t数组
  { $unwind: "$ps.v.t" },
  // 筛选dateP长度超过10的错误记录(正常日期如2020-09-20为10字符)
  { $match: { "ps.v.t.dateP": { $regex: "^.{11,}$" } } },
  // 格式化输出指定字段
  {
    $project: {
      _id: 0,
      f: "$f",
      dateP: "$ps.v.t.dateP",
      t: "$ps.k"
    }
  }
])

脚本说明

  • $unwind:逐层展开嵌套数组(_a、ps、t),将嵌套结构扁平化,便于后续筛选和字段提取。
  • $objectToArray:把_p.s的键值对(如a、c)转为数组,统一处理不同子字段。
  • $match:先过滤出包含_p的元素,再用正则表达式^.{11,}$匹配长度≥11的dateP错误值。
  • $project:最终只保留需要输出的f、dateP、t字段,剔除_id等无关内容。

示例输出

执行聚合后会得到符合要求的结果:

{f:"x",dateP:"20200-09-20", t:"a"}
{f:"x",dateP:"20300-09-20", t:"c"}

内容的提问来源于stack exchange,提问作者R2D2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:00:59