Dio*_*lor 6 pymongo mongodb-query
如何在PyMongo中将$ regex与$ in结合起来?
我想搜索其中一个/*.heavy.*/或/*.metal.*/.
我在python中尝试没有成功:
db.col.find({'music_description' : { '$in' : [ {'$regex':'/*.heavy.*/'} ]} })
Run Code Online (Sandbox Code Playgroud)
Mongo shell中的等价物是:
db.inventory.find( { music_description: { $in: [ /heavy/, /metal/ ] } } )
Run Code Online (Sandbox Code Playgroud)
小智 12
使用python正则表达式.
import re
db.col.find({'music_description': {'$in': [ re.compile('.*heavy.*'), re.compile('.*metal.*')]}})
Run Code Online (Sandbox Code Playgroud)
为什么甚至打扰使用$ in?您通过评估列表中每个值的字段来浪费处理,并且由于每个值都是正则表达式,因此它有自己的性能注意事项,根据查询字符串的获取时间长短,将它们包装在一个中可能是谨慎的.正则表达式和避免$ in查询一起
import re
db.col.find({'music_description': re.compile('heavy|metal')})
Run Code Online (Sandbox Code Playgroud)
同样在mongo shell中
db.inventory.find({music_description: /heavy|metal/})
Run Code Online (Sandbox Code Playgroud)
对于[user2998367]的回答,你正在浪费效率编译正则表达式与贪婪的通配符只是为了匹配,re.search和python中的re.match之间的区别需要使用通配符进行re.search目的,但re.match表现为'字符串中的任何位置',MongoDB也是如此,如果你打算提取它,它只是真正需要的,无论如何你需要在以后查询,或者如果你重新使用已编译的regex在其他地方,你特别需要re.search对re.match
| 归档时间: |
|
| 查看次数: |
7525 次 |
| 最近记录: |