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

