Mongoose关联模型数据无法获取,查询返回Profile不存在求助
解决Mongoose关联查询中Profile无法找到的问题
我看了下你的代码和数据库数据,问题其实很明显——你的Profile文档里没有关联对应的用户ID,所以Profile.findOne({ user: req.user.id })自然找不到匹配的结果,才会返回“Profile not found”。
具体问题点
你提供的数据库里的Profile文档是这样的:
{ "_id": { "$oid": "5b0715288ae56b028b442e7b" }, "handle": "johndoe", "bio": "Hi, my name is John and I live in Toronto, ON, Canada!", "location": "Toronto, ON", "__v": 0 }
这里完全没有user字段,而你的查询条件是根据user字段匹配当前用户的ID(5afcab77c4b9a9030eee35a7),两者根本无法匹配,所以查询返回空,触发了404逻辑。
解决步骤
手动补全现有Profile的关联字段(临时解决)
直接在数据库里给这个Profile文档添加user字段,值设为当前用户的ID:{ "_id": { "$oid": "5b0715288ae56b028b442e7b" }, "user": { "$oid": "5afcab77c4b9a9030eee35a7" }, "handle": "johndoe", "bio": "Hi, my name is John and I live in Toronto, ON, Canada!", "location": "Toronto, ON", "__v": 0 }这样再执行查询就能找到对应的Profile了。
修复Profile创建逻辑(永久解决)
你需要检查创建Profile的代码,确保在生成新Profile时,正确把当前用户的ID赋值给user字段。比如创建路由应该像这样:router.post('/', passport.authenticate('jwt', { session: false }), (req, res) => { // 验证请求字段... const profileFields = {}; profileFields.user = req.user.id; // 这一步必须要有! profileFields.handle = req.body.handle; profileFields.bio = req.body.bio; profileFields.location = req.body.location; new Profile(profileFields).save().then(profile => res.json(profile)); });只有这样,新创建的Profile才会和用户关联起来,后续查询才能正常匹配。
验证查询逻辑
你当前的populate用法是正确的:.populate('user', ['name', 'email'])只要Profile有正确的
user关联,就能成功获取到用户的名称和邮箱信息。
内容的提问来源于stack exchange,提问作者Banner
相关产品推荐
相关产品推荐

