在MongoDB中使用正则表达式查询嵌套文档主要有以下两种方式:
- 使用.操作符逐层访问嵌套文档,并在最内层使用正则表达式查询。
db.users.find({
"address.city": {$regex: /^N/}
})
上例中,先使用.操作符访问address字段,再访问city字段,最后在city字段上使用正则表达式查询首字符为N的城市。
- 使用$elemMatch操作符直接在数组类型的嵌套文档上进行正则表达式查询。
db.users.find({
hobbies: {
$elemMatch: {$regex: /music/i}
}
})
上例中,hobbies字段是一个文档数组,直接使用$elemMatch在其中查找包含music(不区分大小写)的文档。
- 也可以在$elemMatch中使用.操作符逐层访问嵌套文档,再进行正则表达式匹配。
db.users.find({
hobbies: {
$elemMatch: {
name: {$regex: /^p/i},
details.frequency: {$gt: 3}
}
}
})
上例中,先在$elemMatch中使用.操作符访问details字段,然后判断details.frequency大于3,最后在name字段上使用正则表达式查询。
- 可以同时使用$and条件与正则表达式,实现更复杂的逻辑。
db.users.find({
$and: [
{"address.city": {$regex: /^N/}},
{hobbies: {$elemMatch: {name: {$regex: /music/i}}}}
]
})