Mongoose的$in操作符是否存在恒匹配值以消除查询逻辑冗余if分支
解决方案
可以实现删除所有if分支的需求,推荐使用动态构造查询对象的方案,代码更简洁、性能更高、无匹配副作用。
优化后代码
已修复原代码第一个分支中paramas.nationality多写一个a的拼写bug:
module.exports.getUserByQuery = function (params, callback) { // 初始化必选的年龄筛选条件 const query = { age: { $gt: params.minAge, $lt: params.maxAge } }; // 仅当用户选中对应选项时追加筛选条件 if (params.nationality.length) { query.nationality = { $in: params.nationality }; } if (params.languages.length) { query.languages = { $in: params.languages }; } User.find(query, callback); };
补充说明
如果你不想做字段追加判断,硬要通过给参数赋值让$in条件相当于未设置,可以给未选择的参数赋值为全匹配正则/.*/,但这种方式性能更差,且会过滤掉没有对应字段的文档,不推荐使用。
内容的提问来源于stack exchange,提问作者manji
相关产品推荐
相关产品推荐

