chr*_*awn 13 mongoose mongodb node.js
我在连接到mongodb的node.js服务器上使用mongoose.js,我有一个像下面这样的猫鼬模型
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);
Run Code Online (Sandbox Code Playgroud)
我用这样的命令拉
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?
});
Run Code Online (Sandbox Code Playgroud)
我的问题是我不能让subs.members数组填充甚至加载,它只是显示为一个空数组.
即使subs._member加载得很好,我也尝试过.populate("subs.members")无济于事
小智 13
试试这个
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
});
});
Run Code Online (Sandbox Code Playgroud)
@leesei:我不能评论你的帖子(代表太少),所以我把它作为一个单独的答案.
在mongoose 3.6子目录仍然不起作用,问题github.com/LearnBoost/mongoose/issues/1381已于7个月前关闭,并使用以下解决方案作为解决方法.我必须稍微更改它以将填充的子文档合并回主文档.
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;
})
})
Run Code Online (Sandbox Code Playgroud)
在上面的解决方案中,这有效:
Story.populate(doc.stories, {path: 'creator'}, callback)
Run Code Online (Sandbox Code Playgroud)
但这仍然行不通:
Story.populate(doc, {path: 'stories.creator'}, callback)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12265 次 |
| 最近记录: |