Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 填充时,Mongoose对象返回未定义_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript 填充时,Mongoose对象返回未定义

Javascript 填充时,Mongoose对象返回未定义,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在努力解决一个小问题。我想做的是在评论中填充用户 用户架构: const userSchema=mongoose.Schema{ 用户名:{ 类型:字符串, 要求:正确, }, 密码:{ 类型:字符串, 必填项:true } }; 注释模式: const commentSchema=mongoose.Schema{ 评论:{ 类型:字符串 }, 用户:{ 类型:mongoose.Schema.Types.ObjectId, 参考:“用户” }, }; 我已经创建了用户和评论。当我试图找到两个

我正在努力解决一个小问题。我想做的是在评论中填充用户

用户架构:

const userSchema=mongoose.Schema{ 用户名:{ 类型:字符串, 要求:正确, }, 密码:{ 类型:字符串, 必填项:true } }; 注释模式:

const commentSchema=mongoose.Schema{ 评论:{ 类型:字符串 }, 用户:{ 类型:mongoose.Schema.Types.ObjectId, 参考:“用户” }, }; 我已经创建了用户和评论。当我试图找到两个物体时,一切都很好

评论:

Comment.find{}.execerr,comments=>{ console.logcomments; }; 输出:

[ { _id:5e62472d5f593f3c642ee1e5, 评论:‘某物’, 用户:5e624522366d8c4150278a64, __v:0 } ] 用户:

User.find{}.execerr,users=>{ console.logusers; }; 输出:

[ { _id:5e624522366d8c4150278a64, 用户名:某人, 密码:$2a$10$NM5BJ7ZEI1ET3UEZCAKF.8xoTgV/Yti5l1EKNg5inxiehevUlGRm } ] 问题是当我使用.populate'user'注释模型时,它在控制台中返回未定义的注释。我尝试过不同的方法,甚至删除了数据库,但都没有成功

这是发生这种情况时的路线

//通往单个项目的路线 路由器.get'/:projectId',req,res=>{ const requestedProjectId=req.params.projectId; Project.findById{{u id:requestedProjectId}。填充'image_file'。execerr,Project=>{ Rating.find{projectId:requestedProjectId},err,ratings=>{ Rating.countDocuments{projectId:requestedProjectId},错误,计数=>{ Comment.find{projectId:requestedProjectId}。填充'user'。execerr,comments=>{ console.logcomments IFER返回nexterr; res.render'project',{…}; }; }; }; }; };
实际上,您的填充代码是正确的

获取空注释的原因是因为此注释.find{projectId:requestedProjectId}似乎返回空。所以只需检查您的请求参数

另外,为了摆脱回调地狱,您可以像这样使用async/await重写路由

router.get/:projectId,异步请求,res=>{ const requestedProjectId=req.params.projectId; 试一试{ const project=await project.findById{{u id:requestedProjectId}.populateimage\u文件; 如果!项目{ 返回res.status400.sendProject未找到,请检查您的projectId; } const comments=wait Comment.find{projectId:requestedProjectId}.populateuser; console.logcomments; const ratings=await Rating.find{projectId:requestedProjectId}; const count=await Rating.countDocuments{projectId:requestedProjectId}; res.renderproject{ 项目 评论, 收视率,, 计数 }; }犯错误{ console.logError:,err; res.status500.send出错; } };
您可以在尝试填充的位置添加get路径吗?您是否也创建了这样的用户模型?mongoose.modelUser,userSchema?是的,就像你写的一样。你能测试一下这个简单的路由,看看用户是否被填充吗?router.get/comments,async req,res=>{const comments=wait Comment.find.populateuser;res.sendcomments;};是的,用户已填充,当问题未填充时,不会返回未定义的注释。此查询返回空的:Comment.find{projectId:requestedProjectId}