如何在PyMongo中将$regex与$in结合使用?
我想搜索/*.heavy.*/或/*.metal.*/。
我在python中尝试过,但没有成功:
db.col.find({'music_description' : { '$in' : [ {'$regex':'/*.heavy.*/'} ]} })Mongo shell中的等价物是:
db.inventory.find( { music_description: { $in: [ /heavy/, /metal/ ] } } )发布于 2013-12-17 06:53:37
使用python正则表达式。
import re
db.col.find({'music_description': {'$in': [ re.compile('.*heavy.*'), re.compile('.*metal.*')]}})发布于 2015-04-14 14:35:10
为什么还要费心使用$in呢?为列表中的每个值计算字段会浪费处理时间,而且由于每个值都是正则表达式,因此它有自己的性能考虑因素,具体取决于查询字符串的长度,明智的做法是将它们包装在一个正则表达式中,并避免$in查询
import re
db.col.find({'music_description': re.compile('heavy|metal')})与之类似的是mongo shell
db.inventory.find({music_description: /heavy|metal/})至于user2998367的答案,为了匹配的唯一目的而使用贪婪的通配符编译正则表达式是浪费效率的,python中的re.search和re.match之间的差异需要将通配符用于re.search目的,但是re.match的行为类似于“字符串中的任何地方”,MongoDB也是如此,只有当您打算提取时才真正需要它,这将在查询后再做,或者如果您在其他特定需要re.search而不是re.match的地方重用已编译的正则表达式
https://stackoverflow.com/questions/19867389
复制相似问题