首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyMongo $in + $regex

PyMongo $in + $regex
EN

Stack Overflow用户
提问于 2013-11-09 03:48:25
回答 2查看 9.7K关注 0票数 8

如何在PyMongo中将$regex与$in结合使用?

我想搜索/*.heavy.*//*.metal.*/

我在python中尝试过,但没有成功:

代码语言:javascript
复制
db.col.find({'music_description' : { '$in' : [ {'$regex':'/*.heavy.*/'} ]} })

Mongo shell中的等价物是:

代码语言:javascript
复制
db.inventory.find( { music_description: { $in: [ /heavy/, /metal/ ] } } )
EN

回答 2

Stack Overflow用户

发布于 2013-12-17 06:53:37

使用python正则表达式。

代码语言:javascript
复制
import re
db.col.find({'music_description': {'$in': [ re.compile('.*heavy.*'), re.compile('.*metal.*')]}})
票数 15
EN

Stack Overflow用户

发布于 2015-04-14 14:35:10

为什么还要费心使用$in呢?为列表中的每个值计算字段会浪费处理时间,而且由于每个值都是正则表达式,因此它有自己的性能考虑因素,具体取决于查询字符串的长度,明智的做法是将它们包装在一个正则表达式中,并避免$in查询

代码语言:javascript
复制
import re
db.col.find({'music_description': re.compile('heavy|metal')})

与之类似的是mongo shell

代码语言:javascript
复制
db.inventory.find({music_description: /heavy|metal/})

至于user2998367的答案,为了匹配的唯一目的而使用贪婪的通配符编译正则表达式是浪费效率的,python中的re.search和re.match之间的差异需要将通配符用于re.search目的,但是re.match的行为类似于“字符串中的任何地方”,MongoDB也是如此,只有当您打算提取时才真正需要它,这将在查询后再做,或者如果您在其他特定需要re.search而不是re.match的地方重用已编译的正则表达式

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19867389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档