MongoDB按userInfoId查询购物车数据失败,请求解决方案
解决按userInfoId查询MongoDB购物车数据的问题
问题原因分析
你的代码存在两个关键错误:
insertTocartItem.find(id):Mongoose的find()方法传入单个值时,会默认将其作为_id字段的查询条件,但你的数据中userInfoId是独立于_id的字段,因此无法匹配到目标数据。insertTocartItem.find({id}):这是ES6对象简写语法,等价于{id: id},但你的集合中没有名为id的字段,而是userInfoId,所以这个查询条件无法过滤数据,导致返回全部文档。
正确实现代码
你需要明确指定查询userInfoId字段等于前端传入的id值,同时修正空数据的判断逻辑(因为find()返回的是数组,空数组的布尔值为true,原判断!data会失效):
exports.findAllCartItems = (req, res) => { const id = req.params.id; insertTocartItem.find({ userInfoId: id }) .then(data => { if (data.length === 0) res.status(404).send({ message: "Cart Is empty" }); else res.send(data); }) .catch(err => { res .status(500) .send({ message: "Error while showing Cart: " + err.message }); }); };
额外说明
- 如果你的
userInfoId是MongoDB的ObjectId类型,确保前端传入的id是有效的ObjectId字符串,或者在查询时转换类型:const mongoose = require('mongoose'); // ... insertTocartItem.find({ userInfoId: mongoose.Types.ObjectId(id) }) - 原代码中
res.send([data])会把数组再包裹一层数组,这是不必要的,直接返回data即可,因为find()本身返回的就是符合条件的文档数组。
内容的提问来源于stack exchange,提问作者Yagami2
相关产品推荐
相关产品推荐

