Python 当字段为None(mongoengine)时,为布尔值和字符串字段传递什么默认值以成功进行DB比较

Python 当字段为None(mongoengine)时,为布尔值和字符串字段传递什么默认值以成功进行DB比较,python,mongodb,orm,mongoengine,odm,Python,Mongodb,Orm,Mongoengine,Odm,我的查询如下所示: employee = Partner_employees.objects()\ .filter(id=user_id) \ .filter(earnings__gte=preconditions.earnings.gte) \ .filter(earnings__lte=preconditions.earnings.lte) \ .filter(work_rating__gte=p

我的查询如下所示:

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(前提条件.就业状况)=True

不在先决条件下的就业状况 计划A:
val(先决条件.就业状况)=无

用户信息: userA:
val(就业状况)=True

用户B:
val(就业状态)=False

因此,我希望
PlanA
的查询结果中包含
userA
userB
(此操作失败)


planB的查询结果中的
userA
(这是有效的)

这是MongoEngine的一个不幸方面。通常默认值不会显式写入DB(或者如果在某些记录存在后添加了默认值)。我看到一些选择:

  • 将false记录显式设置为false并保存它们。那么查询应该可以工作了。这需要对数据库中已有的记录执行

  • 查询False或None。您可以像这样使用
    功能。这个答案涵盖了这一点,我认为:

  • 例如,我认为它是这样的:

    employee=Partner\u employees.objects()\
    .filter(id=user\u id)\
    .filter(earnings_ugte=前提条件.earnings.gte)\
    .filter(earnings\uu lte=前提条件.earnings.lte)\
    .filter(工作评分=先决条件。信用评分)\
    .filter(Q(就业状态=False或Q(就业状态=无))
    
    我不确定默认值的方向,但您始终可以这样做。我假设默认值为False:

    query=…#同上,但不测试就业状况
    如果前提条件.employment\u统计:
    query=query.filter(就业状况=True)
    其他:
    query=query.filter(Q(就业状态=False或Q(就业状态=None))
    返回query.first()
    
    我想我在这个问题上有点不清楚,函数定义如下:''def find_credit_dcsn(用户id:str,前提条件:前提条件)->Partner_employees''问题是我想在查询Partner_employees.objects()时处理Premissions.employment_status=None的情况