如何通过_id数组及其他字段值查询Mongoose记录的最佳实践?
现有代码问题说明
链式两次调用.find()的写法虽然因为Mongoose内部会自动合并查询条件可以得到正确结果,但属于非常不规范的写法:
- 可读性极差,维护代码的人员无法第一时间梳理全量查询条件
- 属于非明示的Mongoose语法糖特性,后续如果调整查询逻辑、或者切换到MongoDB原生驱动很容易出现兼容性问题
- 后续链式调用
sort、limit等其他方法时容易出现条件优先级混乱的隐性bug
规范实现方式
所有查询条件统一放到同一个find方法的入参对象中,匹配数组内的取值显式使用$in操作符:
const query_id = [1,2,3,4,5,6]; const query_type = "A"; const queries = await Query.find({ _id: { $in: query_id }, query_type: query_type });
额外注意事项
如果你的_id使用的是MongoDB默认的ObjectId类型而非自定义数字类型,需要先把数组内的id值转换为ObjectId类型,避免类型不匹配导致查询无结果:
const query_id = [1,2,3,4,5,6].map(id => mongoose.Types.ObjectId(id));
内容的提问来源于stack exchange,提问作者Bear Bile Farming is Torture
相关产品推荐
相关产品推荐

