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
相关产品推荐
相关产品推荐

