无法获取Mongoose.js子文档数组

我在连接到mongodb的node.js服务器上使用mongoose.js,并且有一个如下的mongoose模型

SubSchema = new Schema({ _member: {type: ObjectId, ref: 'Member'}, members: [{type: ObjectId, ref: 'Member'}], created: { type: Date, default: Date.now } }); mongoose.model('SubModel', SubSchema); MainSchema = new Schema({ _member: {type: ObjectId, ref: 'Member'}, subs: [SubSchema], members: [{type: ObjectId, ref: 'Member'}], created: { type: Date, default: Date.now } }); var MainModel mongoose.model('MainModel', MainSchema); 

我用这样的命令拉

 var q = MainModel.find({}) .sort('created', -1) .limit(25) .populate("_member") .populate("subs._member") .populate("subs.members"); q.execFind(function(err, mains){ //mains[0].subs[0].members - will always be empty why? }); 

我的问题是,我不能得到subs.members数组填充,甚至加载,它只是继续显示为一个空的数组。

我试过.populate(“subs.members”)无效,即使subs._member加载得很好

尝试这个

  SubSchema = new Schema({ _member: {type: ObjectId, ref: 'Member'}, members: [{type: ObjectId, ref: 'Member'}], created: { type: Date, default: Date.now } }); var SubModel = mongoose.model('SubModel', SubSchema);//add MainSchema = new Schema({ _member: {type: ObjectId, ref: 'Member'}, subs: [SubSchema], members: [{type: ObjectId, ref: 'Member'}], created: { type: Date, default: Date.now } }); var MainModel = mongoose.model('MainModel', MainSchema); MainModel.find({}) .sort('created', -1) .limit(25) .populate("_member") .populate("subs._member") .exec(function(err, mains){ //add SubModel.populate(mains,{ path:'subs.members' },function(err,mains){ //mains[0].subs[0].members - is not empty }); }); 

@ leesei:我不能评论你的post(代表太less),所以我把这个作为一个单独的答案。

在mongoose3.6 subdoc人口仍然无法正常工作,问题github.com/LearnBoost/mongoose/issues/1381已被closures了7个月前,以下解决scheme作为一种解决方法。 我不得不稍微改变它以将填充的子文档合并回主文档。

子文档的模型Story必须明确指定:

 Person.findById(user1._id).populate("stories") .exec(function(err, doc { Story.populate(doc.stories, {path: 'creator'}, function (err, stories) { doc.stories = stories; return doc; }) }) 

在上面这个解决scheme的工作中:

 Story.populate(doc.stories, {path: 'creator'}, callback) 

但是这仍然不起作用:

 Story.populate(doc, {path: 'stories.creator'}, callback) 

在JohnnyHK的post后面,你可以指定现在使用populate()的模型:

https://github.com/LearnBoost/mongoose/issues/1377#issuecomment-15920370

我有一些看起来有点不同,但与数组项目填充文档。 我想知道是否这是objectid导致的问题。

 var mongoose = require('mongoose'); var Schema = mongoose.Schema, ObjectID = Schema.ObjectId; var SubSchema = new Schema({ testsub: String, created: { type: Date, default: Date.now } }); var MainSchema = new Schema({ test: String subs: [SubSchema], created: { type: Date, default: Date.now } }); mongoose.model('MainSchema', MainSchema, mainschema); var query = MainSchema.find({}); 

我有几个深层的子文档嵌套层,没有提供的选项为我工作。 我发现这个惊人的Mongoose插件,将无缝地做深人口。 你只是使用相同的语法,你会期望与填充工作,但它实际上工作。

https://github.com/buunguyen/mongoose-deep-populate