[英]MongoDB find operation query gives wrong result
這是我的mongodb find查詢:
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”的元組。
您能解釋一下為什么它返回錯誤的元組以及正確的查詢是什么嗎?
你可以試試這個
//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.*"}},...]);
如果您需要搜索多個字段以進行同一查詢,則可以在文檔中添加一個新字段,其中包含所有字段的串聯值,然后對該字段進行正則表達式搜索。 因此,具有“名稱”,“電子郵件”,“ skillName”字段的文檔將更改為:
{
name: 'Ranjit',
email: 'ranjit@someDomain.com',
skillName: 'MongoDB Administration',
gist: 'Ranjit|ranjit@someDomain.com|MongoDB Administration'
}
您可以基於field gist
輕松進行基於正則表達式的搜索。 如果您在多個字段上執行查詢,則需要復合索引來加快搜索速度,但是在這種情況下,只需要一個索引(對於gist
)。
這是搜索操作將需要觸發的查詢:
db.getCollection('candidate').find({"gist": /ranjit/})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.