- 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;
}
}