use*_*130 10 regex json mongodb
所以我有一些看起来像这样的东西
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"
]
}
]
)
Run Code Online (Sandbox Code Playgroud)
我想找到以 ma 开头并以 l 结尾的名称,例如“manoel”或“manuel”
我已经想出了如何使用空闲查询做一个或另一个:
db.usuarios.find({nome:{$regex: /^ma/ }})
db.usuarios.find({nome:{$regex: /l$/ }})
Run Code Online (Sandbox Code Playgroud)
现在我想将它们组合成一个查询。
Joh*_*yHK 12
您可以将这两个要求组合成一个正则表达式:
db.usuarios.find({nome: /^ma.*l$/})
Run Code Online (Sandbox Code Playgroud)
在正则表达式中,.*表示匹配 0 个或多个任意字符。所以这个正则表达式匹配以 开头ma和结尾的名称l,忽略两者之间的任何内容。
yao*_*ing 10
在javascript中/.../是一个正则表达式,所以不需要$regex。
db.usuarios.find({
$and:[
{nome: /^ma/ },
{nome: /l$/ }
]
})
Run Code Online (Sandbox Code Playgroud)
另请注意starts with可以命中索引。ends with不能。这样你最好有一个选择性的starts with,否则会有大量的对象扫描,这可能会占用额外的CPU并可能减慢你的查询速度。
将两个查询与 AND 运算符结合
db.usuarios.find({
$and:[
{nome:{$regex: /^ma/ }},
{nome:{$regex: /l$/ }}
]
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19823 次 |
| 最近记录: |