python - 当字段为无(mongoengine)时,为布尔和字符串字段传递什么默认值以成功进行数据库比较
问题描述
我的查询看起来像:
employee = Partner_employees.objects()\
.filter(id=user_id) \
.filter(earnings__gte=preconditions.earnings.gte) \
.filter(earnings__lte=preconditions.earnings.lte) \
.filter(work_rating__gte=preconditions.credit_score) \
.filter(employment_status=preconditions.employment_status)
现在有一些计划在先决条件中具有就业状态,而有些则没有。
例子 :
前提条件下的就业状态
B计划:val(preconditions.employment_status ) = True
就业状态不是先决条件
计划A:val(preconditions.employment_status ) = None
用户信息:
用户A:val(employment_status)= True
用户B: val(employment_status)= False
所以我想要userA
并userB
在查询结果中PlanA
(失败)
userA
在查询结果中planB
(这有效)
解决方案
这是 MongoEngine 的一个不幸的方面。通常默认值不会显式写入数据库(或者如果您在某些记录存在后添加了默认值)。我看到几个选项:
将错误记录显式设置为 False 并保存。然后查询应该工作。这需要对数据库中已有的记录进行。
查询 False 或 None。您可以
or
像这样使用该功能。我认为这个答案涵盖了它:MongoDB using an OR clause in mongoengine
以你为例,我认为它是这样的:
employee = Partner_employees.objects()\
.filter(id=user_id) \
.filter(earnings__gte=preconditions.earnings.gte) \
.filter(earnings__lte=preconditions.earnings.lte) \
.filter(work_rating__gte=preconditions.credit_score) \
.filter(Q(employment_status=False or Q(employment_status=None))
我不确定默认值采用哪种方式,但您始终可以这样做。我假设默认值为 False:
query = ... # same as above but not test for employment_status
if preconditions.employment_stats:
query = query.filter(employment_status=True)
else:
query = query.filter(Q(employment_status=False or Q(employment_status=None))
return query.first()
推荐阅读
- jenkins - 声纳扫描仪执行命令詹金斯工作
- c# - 不支持 Azure Cosmos DB 查询范围
- node.js - 如何在续集中关联
- apache - 如何通过 SSH 连接到 apache Web 服务器
- javascript - 使用 Node.js 从文件夹中读取所有文件
- javascript - 带显示的 CSS 不透明度过渡:无
- javascript - 处理浏览器扩展,因此我将我的 JS 从 HTML 移动到 JS 文件。现在,我的 localStorage.setItem 不工作
- ios - iOS 14 中的状态恢复
- c# - 用户 'Domain\\MachineName$' 登录失败
- python - Python解包集合