MongoDB中如何筛选'TOTAL DUE'字段值非'$0.00'的文档
问题:筛选MongoDB中'TOTAL DUE'不等于'$0.00'的文档
我正在使用Node.js和MongoDB 5,想要筛选出'TOTAL DUE'字段值不等于'$0.00'的文档。我可以通过以下语句匹配值为'$0.00'的文档:
{'TOTAL DUE': {$regex: /\$0\./}}
但使用以下否定语句时,会返回全部数据集(包括不存在'TOTAL DUE'字段的文档):
{'TOTAL DUE': {$not :{$regex: /\$0\./}}}
示例文档如下:
[ { "_id": { "$oid": "6386d07324da3f53abd52449" }, "RowId": 0, "ParcelUse": "2", "UseDefinition": "", "TotalFCV": 22400, "Map": 0, "Plat": 0, "lat": 32.44123, "long": -110.7572, "zip": "85712-5433", "totalDue": 0, "AMOUNT": "$0.00", "CERT NO ": "", "FEES": "$0.00", "INTEREST": "$0.00", "INTEREST DATE": "", "INTERESTPERCENT": "", "PAY": "", "PENALTIES": "$0.00", "TAX YEAR": "", "TOTAL DUE": "$0.00" } ]
解决方案
之前的查询返回全部数据,是因为$not会匹配所有不满足正则条件的文档——包括那些没有'TOTAL DUE'字段的文档。要实现需求,需要同时满足两个条件:文档存在'TOTAL DUE'字段,且该字段的值不等于'$0.00'。
方法一:结合字段存在验证与正则否定
用$exists确保字段存在,再搭配$not排除匹配目标正则的文档:
db.collection.find({ 'TOTAL DUE': { $exists: true, $not: /\$0\./ } })
也可以用$and显式组合条件,效果完全一致:
db.collection.find({ $and: [ {'TOTAL DUE': {$exists: true}}, {'TOTAL DUE': {$not: /\$0\./}} ] })
方法二:精确匹配(推荐)
如果'TOTAL DUE'字段值格式固定(都是类似'$X.XX'的字符串),直接用$ne做精确匹配比正则更高效:
db.collection.find({ 'TOTAL DUE': { $exists: true, $ne: '$0.00' } })
内容的提问来源于stack exchange,提问作者user1592380
相关产品推荐
相关产品推荐

