有一组MongoDB文档,其中包含有关书籍的信息。
我需要使用以下条件查找文档:
(header
包含 substring )或(author
包含 substring )
在mongo shell中,我正在使用此查询,并且它工作得很好:
db.books.find({$or: [{author: {$regex: /.*substring.*/i}}, {header: {$regex: /.*substring.*/i}}]})
但是我无法使其在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。
答案 0 :(得分:1)
/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}}
]
}