MongoDB查找操作查询给出了错误的结果

这是我的mongodb查询查询:</ p>

  db.getCollection  ('候选人')。find({
“$或”:[
{
“email_id”:{
“$ regex”:{
“regex”:“^ ranjit”,
“flags “:”i“
}
}
},
{
”mobile_no“:{
”$ regex“:{
”regex“:”^ ranjit“,
”flags“: “我”
}
}
},
{
“phone_no”:{
“$ regex”:{
“regex”:“^ ranjit”,
“flags”:“i “
}
}
},
{
”skill_name“:{
”$ regex“:{
”regex“:”^ ranjit“,
”flags“:”i“\ n}
}
},
{
“current_address”:{
“$ regex”:{
“regex”:“^ ranjit”,
“flags”:“i”
}

}
},
{
“first_name”:{
“$ regex”:{
“regex”:“^ ranjit”,
“flags”:“i”
}
}
}
]
}

</ code> </ pre>

上面的mongo db查询返回错误的元组 。 它返回不包含“ranjit”的元组,但实际上我想要包含“ranjit”的元组。</ p>

你能解释为什么它返回错误的元组以及正确的查询是什么? / p>
</ div>

展开原文

原文

This is my mongodb find query:

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"
          }
        }
      }
    ]
  }
)

Above mongo db query return me wrong tuples. It returns tuples who doesn't contain "ranjit", but actually I want tuples who contain "ranjit".

Could you explain why it's returning wrong tuples and what is the correct query?

duan0403788996
duan0403788996 我想在php中使用$regex来获得结果
接近 4 年之前 回复
dongtuo6562
dongtuo6562 mongoDB-2.4.14
接近 4 年之前 回复
dsf5989
dsf5989 什么是mongodb版本?
接近 4 年之前 回复
doze79040
doze79040 为什么不使用通配符文本索引?
接近 4 年之前 回复

2个回答



你可以试试这个</ p>

  //比如'%ranjit%'
db.getCollection('candidate')。find($ OR:[... {“”email_id“:/ranjit/},....])
nn //喜欢'ranjit%'
db。 getCollection('candidate')。find($ OR:[... {“”email_id“:/^ranjit /},]])
nn //喜欢'%ranjit'
db.getCollection ('候选人')。find($ OR:[... {“”email_id“:/ ranjit $ /},....])
</ code> </ pre>

使用正则表达式:</ p>

  db.getCollection('candidate')。find($ OR [... {“email_id”:{$ regex:“。* ranjit。*”  }},...]); 
</ code> </ pre>
</ div>

展开原文

原文

Your can try this

  //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$/},....])

Using regex :

 db.getCollection('candidate').find($OR[... {"email_id" : {$regex : ".*ranjit.*"}},...]);

dongzhuange2625
dongzhuange2625 对于正则表达式:db.getCollection('candidate')。find($ OR [... {“email_id”:{$ regex:“。* ranjit。*”}},...])它是对的。现在它的 给我结果,但它区分大小写。我可以使它不敏感
接近 4 年之前 回复
douwendu2460
douwendu2460 for regex:db.getCollection('candidate')。find($ OR [... {“email_id”:{$ regex:“。* ranjit。*”}},...]);
接近 4 年之前 回复
doujiao6872888
doujiao6872888 只需检查已编辑的答案
接近 4 年之前 回复
doumanshan6314
doumanshan6314 抱歉,但我想使用正则表达式
接近 4 年之前 回复
duanquan4451
duanquan4451 你可以保持休息只有匹配条件才会改变“email_id”:{“$ regex”:{“regex”:“^ ranjit”,“flags”:“i”}}
接近 4 年之前 回复
doumaojin4008
doumaojin4008 但我希望在php中生成以上查询并传递给mongo db来运行
接近 4 年之前 回复
douqiao5543
douqiao5543 但我想用$或条件搜索多个字段。
接近 4 年之前 回复



如果需要搜索同一查询的多个字段,可以在文档中添加一个新字段,其中包含所有字段的连接值 字段然后在该字段上进行正则表达式搜索。

使用字段'name','email','skillName'的文档将更改为:</ p>

  {
name:'Ranjit',
email:'ranjit @ someDomain.com',
skillName:'MongoDB Administration',
gist:'Randjit |ranjit@someDomain.com | MongoDB Administration'
}
</ code> </ pre>

您可以轻松地在字段 gist </ code>上进行基于正则表达式的搜索。 如果对多个字段执行查询,则需要复合索引来加速搜索,但在这种情况下,只需要一个索引(对于 gist </ code>)。</ p>

以下是您需要为搜索操作触发的查询:</ p>

  db.getCollection('candidate')。find({“gist”:/  ranjit /})
</ code> </ pre>
</ div>

展开原文

原文

If you need to search multiple fields for same query, you can add a new field in the document, which contains concatenated values of all the fields and then make regex search on that field. So the document with fields 'name', 'email', 'skillName' would change to:

{
    name: 'Ranjit', 
    email: 'ranjit@someDomain.com', 
    skillName: 'MongoDB Administration', 
    gist: 'Ranjit|ranjit@someDomain.com|MongoDB Administration'
}

You can easily make a regex based search on field gist. If you execute query on multiple fields, then a compound index will required to speed up the search, however in this case only one index will be required(for gist).

Here is the query that you would be required to fire for the search operation:

db.getCollection('candidate').find({"gist": /ranjit/})

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐