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

MongoDB数组对象中指定name对应value字段的正则查询方案

错误原因

你之前的查询逻辑存在数组匹配的逻辑偏差:MongoDB默认对数组字段的多条件查询规则是,只要数组中存在任意元素满足每一个单独条件即可,不需要同一个元素同时满足所有条件。
你写的查询只要求「数组里存在name为VOUCHERNUMBER的元素」+「数组里存在任意元素的value包含子串11」,两个条件不需要对应同一个数组元素,因此第三个文档因为VOUCHERDATE的value包含11也会被命中,不符合你的预期。哪怕用$and拼接两个条件也不解决问题,本质逻辑没有变化。

正确解决方案

使用$elemMatch运算符,它可以强制要求数组中的同一个元素同时满足所有指定的匹配条件,查询语句如下:

{
  "invoice.data": {
    "$elemMatch": {
      "name": "VOUCHERNUMBER",
      "value": { "$regex": "11" }
    }
  }
}
查询效果

上述语句会仅匹配invoice.data数组中存在同时满足「name等于VOUCHERNUMBER」且「value包含子串11」的元素的文档,刚好返回你预期的前两个符合要求的文档,排除第三个不符合要求的文档。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 22:06:03