这是我的mongodb查询查询:
db.getCollection('candidate').find({
"$or": [
{
"email_id": {
"$regex": {
"regex": "^ranjit",
"flags": "i"
}
}
},
{
"mobile_no": {
"$regex": {
"regex": "^ranjit",
"flags": "i"
}
}
},
{
"phone_no": {
"$regex": {
"regex": "^ranjit",
"flags": "i"
}
}
},
{
"skill_name": {
"$regex": {
"regex": "^ranjit",
"flags": "i"
}
}
},
{
"current_address": {
"$regex": {
"regex": "^ranjit",
"flags": "i"
}
}
},
{
"first_name": {
"$regex": {
"regex": "^ranjit",
"flags": "i"
}
}
}
]
}
)
上面的mongo db查询返回错误的元组。它返回不包含" ranjit"的元组,但实际上我想要包含" ranjit"的元组。
你能解释为什么它会返回错误的元组以及正确的查询是什么?
答案 0 :(得分:1)
你可以尝试这个
//like '%ranjit%'
db.getCollection('candidate').find($OR:[...{""email_id": /ranjit/},....])
//like 'ranjit%'
db.getCollection('candidate').find($OR:[...{""email_id": /^ranjit/},....])
//like '%ranjit'
db.getCollection('candidate').find($OR:[...{""email_id": /ranjit$/},....])
使用正则表达式:
db.getCollection('candidate').find($OR[... {"email_id" : {$regex : ".*ranjit.*"}},...]);
答案 1 :(得分:0)
如果需要搜索多个字段以查找相同的查询,可以在文档中添加一个新字段,其中包含所有字段的连接值,然后在该字段上进行正则表达式搜索。 因此,该文档包含字段' name',' email',' skillName'会改为:
{
name: 'Ranjit',
email: 'ranjit@someDomain.com',
skillName: 'MongoDB Administration',
gist: 'Ranjit|ranjit@someDomain.com|MongoDB Administration'
}
您可以轻松地在字段gist
上进行基于正则表达式的搜索。如果对多个字段执行查询,则需要使用复合索引来加速搜索,但在这种情况下,只需要一个索引(对于gist
)。
以下是您需要为搜索操作触发的查询:
db.getCollection('candidate').find({"gist": /ranjit/})