如何从Mongoose Schema按含courseId的对象数组查询文档?为何返回空?
Mongoose查询返回空数组的原因及解决办法
问题场景
需要从Mongoose Schema中查询_id与给定数组courseIds内courseId字段匹配的文档:
- 给定的
courseIds数组:
courseIds = [ {"courseId":"638c139b147e2173163fd976", "_id":"63906c07b9b09cd81e48480d"}, {"courseId":"638c131a147e2173163fd96b", "_id":"63908c9f1897b57aa6ece69f"} ]
- Schema文档示例:
const courseSchema = [ { "_id":"638c131a147e2173163fd96b", "courseTitle":"Neural Networks", "price":"5000", "shortSummary":"Its a lovely course about NNs, Sequence Models.", "subject":"Deep Learning" }, { "_id":"638c139b147e2173163fd976", "courseTitle":"Graphics", "price":"3000", "shortSummary":"Its a lovely course about Projection, 2D & 3D Transformations.", "subject":"Computer Graphics" }, { "_id":"638c131a147e9053163fd281", "courseTitle":"Operating Systems", "price":"4500", "shortSummary":"Its a lovely course about Scheduling, learning about drivers and peripherals.", "subject":"Hardware" } ]
期望返回_id与courseIds中courseId匹配的两个文档。
错误尝试及原因
你用了以下两种写法,均返回空数组:
const docs = courseSchema.find().where('_id').in(courseIds);
const docs = courseSchema.find({ '_id': { $in: courseIds} });
原因:Mongoose的$in操作符需要接收一个纯值数组,但你直接传入了包含完整对象的数组courseIds。数据库会尝试用文档的_id去匹配整个对象(比如{"courseId":"xxx", "_id":"xxx"}),而非对象内的courseId字段,自然匹配不到任何结果。
正确解决方案
先从courseIds数组中提取出所有courseId字段的值,组成纯值数组后再传入$in:
方法1:常规查询写法
// 提取courseId值组成目标数组 const targetIds = courseIds.map(item => item.courseId); // 执行查询(异步操作需加await或用.then()处理) const docs = await courseSchema.find({ '_id': { $in: targetIds } });
方法2:链式调用写法
const targetIds = courseIds.map(item => item.courseId); const docs = await courseSchema.find().where('_id').in(targetIds);
内容的提问来源于stack exchange,提问作者Pog master
相关产品推荐
相关产品推荐

