无法获取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插件,将无缝地做深人口。 你只是使用相同的语法,你会期望与填充工作,但它实际上工作。