猫鼬填充为实例对象
mongoose populate as an instance object
使用 mongoose 的填充时,您可以取回文档,但它不是定义架构方法的对象实例。
var tweetSchema = new mongoose.Schema({
owner: { type: Schema.Types.ObjectId, ref: 'User' },
message: { type: String },
});
var userSchema = new mongoose.Schema({
email: { type: String, unique: true, lowercase: true },
});
userSchema.methods.test = function(){
return 'test'
}
Tweet.findOne({}).populate('user').exec(function(err,tweet){
console.log(tweet.user.test);
});
这将导致错误“无法读取未定义的 属性 'userTwit'”,因为 tweet.user 只是一个散列而不是文档实例。有没有办法让 population return 成为文档实例???
有什么好的方法可以使这样的事情成为可能?
除非您使用 lean()
,否则填充的字段 是 个文档实例。
看起来你在 tweetSchema
中的用户字段被称为 owner
,而不是 user
,所以这应该有效:
Tweet.findOne({}).populate('owner').exec(function(err, tweet){
console.log(tweet.owner.test());
});
使用 mongoose 的填充时,您可以取回文档,但它不是定义架构方法的对象实例。
var tweetSchema = new mongoose.Schema({
owner: { type: Schema.Types.ObjectId, ref: 'User' },
message: { type: String },
});
var userSchema = new mongoose.Schema({
email: { type: String, unique: true, lowercase: true },
});
userSchema.methods.test = function(){
return 'test'
}
Tweet.findOne({}).populate('user').exec(function(err,tweet){
console.log(tweet.user.test);
});
这将导致错误“无法读取未定义的 属性 'userTwit'”,因为 tweet.user 只是一个散列而不是文档实例。有没有办法让 population return 成为文档实例???
有什么好的方法可以使这样的事情成为可能?
除非您使用 lean()
,否则填充的字段 是 个文档实例。
看起来你在 tweetSchema
中的用户字段被称为 owner
,而不是 user
,所以这应该有效:
Tweet.findOne({}).populate('owner').exec(function(err, tweet){
console.log(tweet.owner.test());
});