为什么我的文献不会填充文档?

我在一个Node.js应用程序中使用Mongoose 4.3.6

比方说,我有两个模型:

 var User = mongoose.model('User', SomeParentSchema.extend({ _id: String, name: String })); var Like = mongoose.model('Like', AnotherParentSchema.extend({ _id: String, user_id: { type: String, ref: 'User' } })); 

我也使用mongoose-schema-extend ,为了这个问题我们可以说这两个实体都是从一些父模式扩展而来的。

由于我使用的是ref ,理论上说, Model.populate应该用User模型自动填充字段。

ref选项告诉Mongoose在人口中使用哪个模型

 Like.findOne({}).populate('user_id').exec(callback); 

以上只是从来没有工作。 那样简单(字段最终为null )。 我必须这样做,使其工作:

 Like.findOne({}).populate({ path: 'user_id', model: 'User' }).exec(callback); 

当我这样做,该字段是预期的User对象(但由于某种原因,我不得不明确告诉populate作为User模型寻找该path;即使ref应该处理,根据我链接的mongoose文档以上)。

我错过了什么吗?

我只是testing你的示例代码,下面这个查询Like.findOne({}).populate('user_id').exec(callback); 看起来很好。

架构:

 var PersonSchema = new mongoose.Schema({ t: String }, {collection: 'persons'}); var User = mongoose.model('User', PersonSchema.extend({ _id: String, name: String })); var ParentSchema = new mongoose.Schema({ s: String }, {collection: 'parent'}); var Like = mongoose.model('Like', ParentSchema.extend({ _id: String, user_id: { type: String, ref: 'User' } })); 

将数据插入数据库,

 var user = new User({ t: 't1', _id: '1234567', name: 'test' }); var like = new Like({ s: 's1', _id: '23456789', }); user.save(function(err, u){ if(err) console.log(err); else { like.user_id = u._id; console.log(like); like.save(function(err) { if (err) console.log(err); else console.log('save like and user....'); }); } }); 

通过查询

 Like.findOne({}).populate('user_id').exec(function(err, doc) { if (err) console.log(err); else console.log(doc); }); 

结果是

 { _id: '23456789', __t: 'Like', user_id: { _id: '1234567', __t: 'User', t: 't1', name: 'test', __v: 0 }, s: 's1', __v: 0 }