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

MongoDB的find()方法添加查询条件后无法获取对应数据问题求助

问题错误点

  • 嵌套字段查询语法错误:MongoDB查询嵌套文档的指定字段时,必须使用点表示法,直接写{user:{_id:xxx}}是要求精确匹配整个user子文档的全部字段,不是仅匹配user._id,自然查不到结果。
  • 用户ID来源未定义:代码中直接使用的user._id没有声明定义,你需要的当前登录用户ID存储在request.session.user_id中,直接调用未定义变量会导致查询条件无效。
  • 数据类型不匹配:存储在session中的user_id一般是字符串类型,而库中user._id是ObjectId类型,直接做等值匹配会因为类型不一致返回空结果。
  • 语法错误:你编写的查询条件括号未闭合,且单用户查询不需要用$in操作符,属于不必要的冗余写法。

修正方案

首先确认你已引入对应环境的ObjectId构造方法:

  • 用官方mongodb驱动:添加const { ObjectId } = require('mongodb');
  • 用mongoose ODM:添加const ObjectId = require('mongoose').Types.ObjectId;

修正后可正常运行的代码:

// 此处替换为对应环境的ObjectId引入语句
const { ObjectId } = require('mongodb');

app.get("/myvideos", function(request, result){
  // 未登录直接返回空结果
  if (!request.session.user_id) {
    return result.render("myvideos", {
      isLogin: false,
      videos: []
    });
  }
  // 正确查询条件
  database.collection("videos").find({
    "user._id": ObjectId(request.session.user_id)
  }).toArray(function(error, videos){
    // 新增错误捕获方便后续排查问题
    if (error) {
      console.error('视频查询失败:', error);
      return result.render("myvideos", {
        isLogin: true,
        videos: []
      });
    }
    result.render("myvideos", {
      isLogin: true,
      videos: videos
    });
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 04:36:08