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

MongoDB按userInfoId查询购物车数据失败,请求解决方案

解决按userInfoId查询MongoDB购物车数据的问题

问题原因分析

你的代码存在两个关键错误:

  1. insertTocartItem.find(id):Mongoose的find()方法传入单个值时,会默认将其作为_id字段的查询条件,但你的数据中userInfoId是独立于_id的字段,因此无法匹配到目标数据。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:41:31