Mongoose JS - 填充方法不返回完整引用的对象... - 仅返回 objectId 版本
Posted
技术标签:
【中文标题】Mongoose JS - 填充方法不返回完整引用的对象... - 仅返回 objectId 版本【英文标题】:Mongoose JS - Populate method not returning full referenced object... - Only returning objectId version 【发布时间】:2017-02-10 19:59:36 【问题描述】:当我使用填充方法时,我仍然只得到_id。
这是我希望在其中发生的控制器:
show: function(req, res)
User.findOne(
_id: req.params.id
)
.populate("roommates")
.exec(function(err, user)
if (err)
console.log(err);
else
res.json(user.roommates)
)
这是我的用户模型,最底部是室友参考:
var UserSchema = new Schema(
name: String,
username:
type: String,
required: [true, "Please enter a username"],
minlength: [6, "Username must be at least 6 characters"],
maxlength: [15, "Username cannot exceed 15 characters"],
unique: true
,
password:
type: String,
required: [true, "Please enter a password"],
minlength: [6, "Password must be at least 6 characters"],
maxlength: [17, "Password cannot exceed 17 characters"],
,
roommates: [roommate: type: Schema.Types.ObjectId, ref: "User", status: type: String, default: "pending", requests: [description: String, amount: Number], balance: Number]
)
什么给了?我之前已经让这个填充方法在另一个应用程序中工作,但它并没有给我返回引用的对象,只是正常的对象,因为它存在于数组中,没有必要的用户详细信息。
这是响应.. 但 _id 应该填充到带有其他属性(如名称等)的 objetx 中......:
[
"_id": "57f17d5f51cdcb0b5cefe74d",
"balance": 0,
"requests": [],
"status": "pending"
]
【问题讨论】:
【参考方案1】:roommates
数组中的 roommate
字段是架构中的引用,因此您需要在 populate
调用中使用点符号:
User.findOne(
_id: req.params.id
)
.populate("roommates.roommate")
.exec(function(err, user) ...
【讨论】:
但是先生,最奇怪的事情正在发生。您刚刚建议的内容不起作用,但是起作用的是使用“roommates._id”。请问对此有何解释?这让我很困惑。也许即使“roommate(singular)”是具有 ObjectId 引用的那个,因为它嵌套在“ROOMMATES”中,你所要做的就是说“roommates._id”,它知道“roommates”中的这些属性之一有对象引用???我不明白为什么当我使用“roommates._id”时这会起作用 这没有任何意义。我认为我们需要查看minimal reproducible example 来帮助您解决这个问题。以上是关于Mongoose JS - 填充方法不返回完整引用的对象... - 仅返回 objectId 版本的主要内容,如果未能解决你的问题,请参考以下文章