MongoDB的发现操作查询给出错误的结果
这是我的MongoDB查找查询: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"
}
}
}
]
}
)
以上蒙戈DB查询返回我是错的元组。它返回不包含“ranjit”的元组,但实际上我想要包含“ranjit”的元组。
你能解释为什么它返回错误的元组,什么是正确的查询?
你可以试试这个
//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.*"}},...]);
但我想用$或条件在多个字段中搜索。 – user3235105
但我想在php中生成上面的查询,并传递给mongo db来运行 – user3235105
您可以保持相同的只有匹配条件将改变“email_id”:{ “$ regex”:{ “regex”:“^ ranjit”, “flags”:“i” } } – AJS
如果你需要搜索同一个查询多个字段,你可以在文档,其中包含连接值在添加新字段的所有字段,然后在该字段上进行正则表达式搜索。 因此,与字段的名称“,“电子邮件”的文件,“skillName”将改变为:
{
name: 'Ranjit',
email: '[email protected]',
skillName: 'MongoDB Administration',
gist: 'Ranjit|[email protected]|MongoDB Administration'
}
您可以轻松地进行现场gist
正则表达式基于搜索。如果您在多个字段上执行查询,则需要一个复合索引来加速搜索,但在这种情况下,只需要一个索引(对于gist
)。
这里是你将需要火的搜索操作查询:
db.getCollection('candidate').find({"gist": /ranjit/})
为什么不使用通配符的文本索引? – styvane
什么是mongodb版本? – 4J41
mongo DB - 2.4.14 – user3235105