MongoDB查询:匹配同一嵌入式文档的多条件
解决MongoDB嵌入式数组多条件匹配同一子文档的问题
问题原因
你当前的查询db.inventory.find( { "instock.qty": 5, "instock.warehouse": "A" } )会匹配**整个文档中存在任意子文档满足qty=5,且存在任意子文档满足warehouse="A"**的记录,不管这两个条件是不是落在同一个instock子文档里。这就是为什么planner文档也被返回了——它的instock数组里有一个子文档warehouse="A"(qty=40),还有另一个子文档qty=5(warehouse="B"),分别满足两个条件,所以被错误匹配。
正确查询方式
要确保两个条件匹配同一个嵌入式子文档,需要使用$elemMatch操作符,它专门用于指定数组元素需要同时满足多个查询条件:
db.inventory.find({ "instock": { "$elemMatch": { "warehouse": "A", "qty": 5 } } })
验证结果
执行上述查询后,只会返回符合预期的单条文档:
{ "_id" : ObjectId("63061a1bb87c1278047a2717"), "item" : "journal", "instock" : [ { "warehouse" : "A", "qty" : 5 }, { "warehouse" : "C", "qty" : 15 } ] }
补充说明
$elemMatch适用于当你需要数组中的单个元素同时满足多个条件的场景- 如果只是匹配数组元素的单个条件,不需要使用
$elemMatch,直接用普通的点符号查询即可
内容的提问来源于stack exchange,提问作者Blue Aqua
相关产品推荐
相关产品推荐

