有一个 MongoDB 文档集合,其中包含有关书籍的信息。
我需要使用以下标准查找文档:
(header
包含子串) OR (author
包含子串)
在 mongo shell 中,我使用这个查询效果很好:
db.books.find({$or: [{author: {$regex: /.*substring.*/i}}, {header: {$regex: /.*substring.*/i}}]})
BUT我无法让它在 PyMongo 中工作。
这是我的代码:
search = 'substring'
search_request = {
'$or':
[
{'author': {'$regex': f"/.*{search}.*/", '$options': 'i'}},
{'header': {'$regex': f"/.*{search}.*/", '$options': 'i'}}
]
}
cursor = self.books.find(search_request)
它什么也不返回。
我正在使用Python 3.7.0、PyMongo 3.7.1、MongoDB Server 3.2.11。
The /pattern/
语法是用于创建正则表达式的 Javascript 文字语法。
在 Python 中,同样可以不使用正斜杠来编写。例如
search_request = {
'$or':
[
{'author': {'$regex': f".*{search}.*", '$options': 'i'}},
{'header': {'$regex': f".*{search}.*", '$options': 'i'}}
]
}
如果您想惯用并创建一个正则表达式对象。您可以这样做,得到相同的结果:
import re
search = "substring"
search_expr = re.compile(f".*{search}.*", re.I)
search_request = {
'$or': [
{'author': {'$regex': search_expr}},
{'header': {'$regex': search_expr}}
]
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)