如何在MongoDB聚合$match阶段按字符串指定位置字符过滤文档?
可以在$match阶段实现该过滤
当然可以直接在$match阶段完成这个过滤需求,无需先经过$project阶段。你可以借助$expr在$match中使用聚合表达式,结合字符串截取操作符定位目标字符并做判断:
具体聚合代码
db.collection.aggregate([ { $match: { $expr: { $eq: [ { $substrCP: ["$close", 1, 1] }, // MongoDB字符串索引从0开始,第二个字符对应索引1 "0" ] } } } ])
代码说明
$substrCP:用于截取字符串指定部分,参数依次为目标字段、起始索引(从0开始计数)、截取长度。这里取close字段的第二个字符(索引1),截取长度为1。$eq:判断截取到的字符是否等于"0",满足条件的文档会被保留。
你之前尝试的问题
你在$project阶段写的代码逻辑存在问题:$regex无法直接嵌套$substr这类表达式使用,同时你指定的起始索引为2(对应第三个字符),和需求的第二个字符不匹配,所以无法得到正确结果。
内容的提问来源于stack exchange,提问作者phani
相关产品推荐
相关产品推荐

