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

时间:2016-12-01 06:01:31

标签: php regex node.js mongodb mongodb-query

这是我的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"的元组。

你能解释为什么它会返回错误的元组以及正确的查询是什么?

2 个答案:

答案 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/})