python-3.x - MongoEngine:构建过滤器查询
问题描述
我想构建一个过滤器查询,当我调用通用过滤器函数('filter_it('username', '=', 'test_user')。
最简单的例子:
# grab the user, apply filter
result = User.objects().filter(username="test_user")
# print result
print(result.get())
回报:
test_user
现在,如果我尝试使用变量:
# set query
query = 'username="test_user"'
# grab the user, apply filter
result = User.objects().filter(query)
# print result
print(result.get())
回报:
mongoengine.errors.InvalidQueryError: Not a query object: username="test_user". Did you intend to use key=value?
我尝试使用原始查询构建它,但没有设法让它工作。我也尝试过使用 .format() 无济于事。似乎自定义查询集可能会解决问题,但不能以我想要的方式应用。
有没有人有任何建议、想法或解释?我认为问题围绕将字符串作为查询对象传递,但我似乎无法在 mongoengine 文档中找到解释或替代方法。
解决方案
Q 对象允许您使用和/或运算符 (&/|) 构建复杂的查询。
例如:
from mongoengine import Q
# set query
query = Q(username="test_user")
# grab the user, apply filter
result = User.objects()(query)
# print result
print(result.get())
结果
test_user
我们也可以这样做:
# set query
query = str("test_user")
# grab the user, apply filter
result = User.objects()(username=query)
# print result
print(result.get())
结果
test_user
据我所知,不可能使用变量来定义正在搜索的字段。
这失败了:
# set field
field = "username"
# set query
query = str("test_user")
# grab the user, apply filter
result = User.objects()(field=query)
# print result
print(result.get())
结果
mongoengine.errors.InvalidQueryError: Cannot resolve field "field"
每一个变化都失败了。
推荐阅读
- python - Openpyxl - 如何将数据范围从excel工作表复制到另一个
- python - 使用熊猫用另一列中的值填充特定列中的空白行
- json - jq:如何使用多个选择作为值重塑对象?
- reactjs - ReactJS 和禁用/启用选定的字段
- architecture - 地理空间处理服务:数据访问还是业务逻辑?
- c++ - 如何用从文件 .msg 读取的文本填充标签
- azure - 如何在 Azure IoT Central 中发送可写属性数据
- angular - 带有 Firestore 的 Angular 9 SSR - 元标记未动态加载
- javascript - Websocket等待带有队列的服务器响应
- python - 使用 FireFox 驱动程序 (geckodriver)