You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 14:40:37