- Published on
Mongodb 新增字段查询时默认值处理
- Authors
- Name
- Shelton Ma
问题现象(What Happened)
给Mongodb表添加新字段isActive
, 类型为Boolean
, 默认为true
. 查询语句query.isActive = parseBoolean(params.isActive)
发现没有结果返回
问题原因(Why It Happened)
由于字段isActive
是后续添加, 即便默认为true
, 数据库中已有记录并没有改字段, 如果使用query={isActive: true}
, mongodb将会显式比较isActive: true
的数据, 所以不会有数据返回
解决方案(How to Fix It)
在创建查询条件时, 同时进行隐式(字段不存在)和显式判断
// parseBoolean parse "true" to true, "false" to false
if (params.isActive !== undefined) {
const isActive = parseBoolean(params.isActive);
if (isActive) {
// 查询 isActive = true 或者没有 isActive 字段
query.$or = [
{ isActive: true },
{ isActive: { $exists: false } },
];
} else {
// 查询 isActive 显式为 false
query.isActive = false;
}
}