使用Mongoose填充User模型friends字段仅返回当前用户,如何获取好友姓名?
问题分析与解决方案
你遇到的问题是因为find()方法返回的是包含匹配文档的数组,而非单个文档。虽然执行了populate("friends"),但直接打印数组可能没注意到内部用户对象已填充好友数据;同时还要排查几个细节:
修正代码方案
方案一:使用findById(推荐)
findById直接返回单个用户对象,简洁直观:
// 确保使用定义好的User模型,而非其他变量 const user = await User.findById(req.user._id).populate("friends").exec(); console.log(user.friends); // 此处可查看填充了姓名等信息的好友列表
方案二:若坚持用find,需取数组第一个元素
const userList = await User.find({'_id': req.user._id}).populate("friends").exec(); // 提取数组中的目标用户对象 const currentUser = userList[0]; console.log(currentUser.friends);
额外检查点
- 确认
req.user._id对应用户的friends字段中,确实存储了其他用户的ObjectId(可直接查看MongoDB数据库中该用户文档的friends数组是否有值)。 - 检查查询所用模型是否为你定义的
User,避免变量名大小写或拼写错误(比如代码里的users是否是User的正确引用)。
内容的提问来源于stack exchange,提问作者Abhinav Anand
相关产品推荐
相关产品推荐

