簡體   English   中英

MongoDB查找操作查詢給出錯誤結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM