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
相关产品推荐
相关产品推荐

