为了账号安全,请及时绑定邮箱和手机立即绑定

使用pymongo执行正则表达式查询

使用pymongo执行正则表达式查询

有只小跳蛙 2019-12-13 09:23:27
我正在尝试使用pymongo对mongodb服务器执行正则表达式查询。文件结构如下{  "files": [    "File 1",    "File 2",    "File 3",    "File 4"  ],  "rootFolder": "/Location/Of/Files"}我想获取所有与* File模式匹配的文件。我试图这样做db.collectionName.find({'files':'/^File/'})但是我什么也没有得到,我是否缺少任何东西,因为根据mongodb docs,这应该是可能的。如果我在mongo控制台中执行查询,则可以正常工作,这是否意味着api不支持它,或者我只是错误地使用了它
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

如果要包括正则表达式选项(例如,忽略大小写),请尝试以下操作:


import re

regx = re.compile("^foo", re.IGNORECASE)

db.users.find_one({"files": regx})


查看完整回答
反对 回复 2019-12-13
?
Helenr

TA贡献1780条经验 获得超3个赞

事实证明,在pymongo中进行正则表达式搜索的方式略有不同,但同样简单。


正则表达式如下:


db.collectionname.find({'files':{'$regex':'^File'}})

这将匹配所有具有files属性的文档,该文档中包含以File开头的项


查看完整回答
反对 回复 2019-12-13
?
烙印99

TA贡献1829条经验 获得超13个赞

为了避免双重编译,您可以使用PyMongo随附的bson regex包装器:


>>> regx = bson.regex.Regex('^foo')

>>> db.users.find_one({"files": regx})

正则表达式只是存储字符串而不尝试对其进行编译,因此find_one可以将参数检测为“ Regex”类型并形成适当的Mongo查询。


我觉得这种方式比其他最佳答案略带Pythonic,例如:


>>> db.collectionname.find({'files':{'$regex':'^File'}})

如果您打算使用正则表达式查询,则值得阅读bson Regex文档,因为有一些注意事项。


查看完整回答
反对 回复 2019-12-13
  • 3 回答
  • 0 关注
  • 1856 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信