为何将limit放入queryObject后Mongoose查询返回空数组?
Mongoose查询添加limit到queryObject返回空数组的原因
核心问题出在对Mongoose find()方法参数的理解错误:
Movie.find(queryObject)中的queryObject是文档筛选条件,它的作用是告诉MongoDB:"去集合里找所有匹配这些字段键值对的文档"。你给queryObject加上limit:2,相当于让Mongoose去查找自身包含limit字段且值为2的文档,如果你的Movie集合里没有这类文档,自然返回空数组。- 而单独用变量存储
limit再调用.limit(limit),是正确用法:find()先按条件筛选出符合要求的文档,再通过limit()这个游标方法限制返回结果的数量,这才是Mongoose设计的正确调用逻辑。
另外你代码里把sort放到queryObject里也是错误的,只是没触发明显问题而已。正确的写法应该把游标方法(sort、limit、skip等)单独链式调用,比如:
const showOneMovie = async(req,res)=>{ try { const {title, publishDate, genre, skip, sort} = req.query; const queryObject = {}; if(title){ queryObject.title = title; } if(publishDate){ queryObject.publishDate = publishDate; } // 先初始化基础查询 let query = Movie.find(queryObject); // 单独处理排序逻辑 if(sort){ const sortRule = sort === "Ascending" ? "-title" : "title"; query = query.sort(sortRule); } // 单独处理结果数量限制 const limit = 2; query = query.limit(limit); // 执行最终查询 const data = await query; res.status(200).json(data); } catch (error) { console.log(error) } }
内容的提问来源于stack exchange,提问作者IHateCoding
相关产品推荐
相关产品推荐

