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

Mongoose查询指定iduser的score数据返回全集合内容故障求助

问题原因排查
    1. 过滤条件字段名不匹配
      你在Schema中定义的存储用户ID的字段是iduser,但执行查询时写的过滤条件是{ ids },这个字段在你的集合中不存在。Mongoose执行查询时,如果过滤条件的字段不存在于集合中,该条件会被忽略,等效于执行无过滤的find(),自然返回集合全部数据。
    1. User查询混用异步语法
      你查询用户信息时同时使用了直接赋值和回调函数,此时user变量拿到的是Mongoose的Query对象而非实际的查询结果,后续调用user.quiz无法拿到正确值。
    1. 渲染参数缺少作用域
      渲染模板时你使用了session.user.name,但全局没有session变量,实际存储用户信息的是req.session,此处会抛出未定义错误。
解决方法

修改后的/result接口代码如下:

router.get('/result', auth, async(req, res) => {
  try {
    const userId = req.session.user._id.toString(); // 统一转成字符串,避免ObjectId和字符串类型不匹配
    // 修正用户查询写法,用await获取真实查询结果
    const user = await User.findById(userId).exec();
    if (!user) {
      return res.status(404).send('用户不存在');
    }
    // 修正查询条件,使用Schema中实际存在的iduser字段
    const notes = await storescors16.find({ iduser: userId }).exec();
    
    res.render('./options/result', {
      notes: notes,
      scor: user.quiz,
      title: 'سجل درجات النجم',
      name: req.session.user.name, // 补充req作用域
      email: req.session.user.email,
    })
  } catch (err) {
    console.error('查询出错:', err);
    res.status(500).send('服务器错误');
  }
});

另外建议你在提交数据的接口中,也把req.session.selectuserid转成字符串再存入iduser字段,保证存储和查询的类型完全一致:

var scor = new storescors16({
  iduser: req.session.selectuserid.toString(),
  level: level,
  day: day,
  date: date,
  time: time,
  objectif: ob,
})

内容的提问来源于stack exchange,提问作者JANATI MOHAMMED

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:54:03