mongodb正則查詢使用須知


假定需要查詢name中包含s的:

db.customer.find({'name': /.*s.*/i})

pymongo的寫法如下:

rexExp = re.compile('.*s.*', re.IGNORECASE)
db.customer.find({'name':rexExp })

或者

db.customer.find({'name': {'$regex':'.*s.*'} })

 

為提高查詢效率,添加索引{'name':1}

 

測試結果:無法命中索引

 

要想命中索引,還得改下查詢條件,查詢必須符合2點

  1. 必須是s開頭的,而不能是s在中間
  2. 必須是大小寫敏感的

 

那么,查詢看起來應該是這個樣子:

db.customer.find({'name': /^s.*/})

pymongo的寫法如下:

rexExp = re.compile('^s.*')
db.customer.find({'name':rexExp })

 

omg,看來單靠mongodb是很難滿足實際的應用場景,所以還是另外考慮其它搜索引擎做為全文索引的補充吧,lucene系列(solr,elasticSearch)或sphinx都可以考慮下


 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM