猫鼬填充为实例对象

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());
});