如何使用MongoDB嵌套对象匹配语法查询对象属性?
实现MongoDB聚合$match阶段的嵌套对象查询
针对你给出的文档结构:
{ a: { b: 1, c: 3 } }
要在aggregate的$match阶段用嵌套对象语法指定a.b或a.c的查询条件,直接按照嵌套结构编写条件即可,以下是不同场景的具体示例:
1. 单字段匹配
比如匹配a.b等于5的文档,直接嵌套书写条件:
db.col.aggregate([ { $match: { a: { b: { $eq: 5 } } } } ]) // 简化写法($eq操作符可省略) db.col.aggregate([ { $match: { a: { b: 5 } } } ])
2. 多字段“与”匹配
要同时满足a.b=5且a.c=10的条件:
db.col.aggregate([ { $match: { a: { b: 5, c: 10 } } } ])
这种写法和点符号语法的{"a.b":5, "a.c":10}完全等价,默认是逻辑与的关系。
3. 多字段“或”匹配
如果需要匹配a.b=5或a.c=10的文档,需结合$or操作符,每个条件都嵌套在a对象下:
db.col.aggregate([ { $match: { $or: [ { a: { b: 5 } }, { a: { c: 10 } } ] } } ])
额外说明
- 嵌套对象语法和点符号语法在
$match阶段功能完全一致,MongoDB会自动解析嵌套结构对应的字段路径 - 若使用比较操作符(如
$gt、$lt、$in等),直接将操作符嵌套在对应字段下即可,示例:
// 匹配a.b大于3的文档 db.col.aggregate([ { $match: { a: { b: { $gt: 3 } } } } ])
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

