[英]Query pymongo with case insensitive text
以下是我如何使用pymongo從mongodb查詢數據的方法:
def is_philippine_facebook(self,facebook_user):
is_philippine = False
db_server = self.ConfigSectionMap('db_server')
database_name = db_server['database']
db = self.client[database_name]
cursor = db[collection_name].find({
'isPhilippine':True,
'facebook_user': re.compile('@'+facebook_user, re.IGNORECASE)
})
for document in cursor:
if document is not None:
is_philippine = True
break
return is_philippine
實際上,我想查詢具有case insensitive
選項的某個facebook_user
記錄。 但是,查詢返回許多不正確的結果。 例如,如果facebook_user
為WWF
,則將返回帶有WWF_XYZ
記錄。
我怎樣才能解決這個問題? 謝謝。
使用以下修復程序:
re.compile(r'@{0}\b'.format(facebook_user), re.IGNORECASE)
參見regex演示 。
圖案細節 :
@WWF
文字@WWF
\\b
單詞邊界(要求字母,數字或_
或@WWF
之后的字符串末尾以外的字符) 如果facebook_user
可能包含特殊字符,則需要使用
re.compile(r'(?<!\w)@{0}(?!\w)'.format(re.escape(facebook_user)), re.IGNORECASE)
但是, facebook_user
似乎僅包含單詞字符,因此在這種情況下,單詞邊界確實足夠。
聽起來像您想要一個單詞邊界\\b
'facebook_user': re.compile('@'+ facebook_user +'\\b', re.IGNORECASE)
因此,如果您提供WWF
或wwf
則它只會匹配到“單詞”的末尾,而不會超出它。
需要注意的是,不區分大小寫的搜索不以脫字符^
錨定到字符串開頭的搜索需要完全收集掃描,並且效率不高。
如果與字符串的開頭匹配,則應使用插入符號,並且可能應將大小寫標准化為用於搜索的文檔屬性,因此也不需要“不區分大小寫”選項。 要在搜索中使用索引,需要這兩件事。 請參閱文檔中的$regex
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.