使用Djongo驱动时,Django布尔字段过滤查询报错排查求助
排查步骤
1. 确认Djongo版本兼容性
你使用的Djongo版本是1.3.6,该版本存在布尔字段NOT查询的解析Bug。尝试升级到最新稳定版,执行命令:
pip install --upgrade djongo
升级后重新测试查询,验证问题是否解决。
2. 替换查询写法,绕过解析错误
Django生成的WHERE NOT is_deleted语法触发了Djongo的解析异常,换用以下写法测试:
- 显式指定精确匹配:
TmpModel.objects.filter(is_deleted__exact=False).all() - 使用
exclude替代filter:TmpModel.objects.exclude(is_deleted=True).all()
3. 检查MongoDB中的数据存储
登录MongoDB查看solutions_tmpmodel集合的文档,确认:
- 所有文档的
is_deleted字段均为布尔类型(true/false),无缺失该字段的情况。 - 第一个默认保存的文档,是否正确存储了
is_deleted: false,而非完全缺失该字段。
若存在缺失is_deleted字段的文档,Djongo在解析is_deleted=False查询时可能出现逻辑混淆,引发解析错误。
4. 修正模型主键定义
你的模型中_id字段未指定primary_key=True,Django默认会生成id自增主键,可能导致字段映射冲突。修改模型定义:
class TmpModel(models.Model): _id = ObjectIdField(primary_key=True) is_deleted = models.BooleanField(default=False)
重新执行迁移后测试查询。
内容的提问来源于stack exchange,提问作者StuffHappens
相关产品推荐
相关产品推荐

