惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 司徒正美
The GitHub Blog
The GitHub Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
L
LangChain Blog
GbyAI
GbyAI
博客园_首页
V
Visual Studio Blog
Martin Fowler
Martin Fowler
WordPress大学
WordPress大学
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - 叶小钗
腾讯CDC
博客园 - Franky
IT之家
IT之家
Google DeepMind News
Google DeepMind News
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
大猫的无限游戏
大猫的无限游戏
Recent Announcements
Recent Announcements
小众软件
小众软件
博客园 - 三生石上(FineUI控件)
B
Blog
酷 壳 – CoolShell
酷 壳 – CoolShell

博客园 - yaksea

APScheduler: standalone vs daemonic 一句话解释jquery中offset、pageX, pageY、position、scrollTop, scrollLeft的区别 PhoneGap源代码下载地址 python mysql 库的安装 windows环境下PYTHONPATH的设置 Eclipse+pydev2.2+python2.7 中文乱码问题 雷军:互联网创业的葵花宝典 什么是node.js 对python元类概念的理解 设置Django,在Eclipse+PyDev环境中开发Django应用 Python的模块、包等概念的理解 Python下划线与命名规范 Django如何进行数据访问查询 Django IDE 开发环境的搭建 在Eclipse下如何安装插件 使用Django如无到有11步快速构建Web应用 如何使用blog客户端 Apache如何添加虚拟目录 Zend Studio下的PHP代码调试
mongodb正则查询使用须知
yaksea · 2012-07-05 · via 博客园 - yaksea

假定需要查询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都可以考虑下