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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:12:20