所以我有类似这样的东西
db.usuarios.insert
(
[
{
"nome" : "neymala",
"idade" : 40,
"status" : "solteira"
},
{
"nome" : "gabriel",
"idade" : 31,
"status" : "casado"
},
{
"nome" : "jose",
"idade" : 25,
"status" : "solteiro"
},
{
"nome" : "manoel",
"idade" : 25,
"status" : "solteiro",
"interesses" : [
"esporte",
"musica"
]
}
]
)
我想找到以ma开头并以l结尾的名称,例如“ manoel”或“ manuel”
我已经弄清楚了如何使用休闲查询:
db.usuarios.find({nome:{$regex: /^ma/ }})
db.usuarios.find({nome:{$regex: /l$/ }})
现在我想将它们组合成一个查询。
答案 0 :(得分:2)
您可以将两个需求合并到一个正则表达式中:
db.usuarios.find({nome: /^ma.*l$/})
在正则表达式中,.*
表示匹配0个或多个任何字符。因此,此正则表达式匹配以ma
开头和以l
结尾的名称,而忽略两者之间的任何内容。
答案 1 :(得分:1)
将两个查询与AND操作符组合在一起
db.usuarios.find({
$and:[
{nome:{$regex: /^ma/ }},
{nome:{$regex: /l$/ }}
]
})
答案 2 :(得分:0)
在javascript /.../
中是一个正则表达式,因此不需要$regex
。
db.usuarios.find({
$and:[
{nome: /^ma/ },
{nome: /l$/ }
]
})
另请注意,starts with
可以命中索引。 ends with
不能。这样,您最好有选择地使用starts with
,否则会有很多对象扫描,这可能会占用额外的CPU并可能减慢查询速度。
答案 3 :(得分:0)