使用mongoose和Express与mongodb
所以现在我有一个框架模式,一个框可以包含对象,或者它可以包含其他框:
我的框架模式如下所示:
var box = new Schema({
boxId: ObjectId,
boxContents: [{
contentType: {
type: String,
enum: ["box", "object"]
},
typeId: {
subBox: {
type: Schema.Types.ObjectId,
ref: 'box'
},
subObject: {
type: Schema.Types.ObjectId,
ref: 'object'
}
}
}]
});
我确保我的'ref'标有相应的型号名称,所以我不相信这是问题所在。我像这样创建一个新文档:
var box1 = new Box({
contents: [{
contentType: 'object',
typeId: {
subObject: object1._id
}
}]
});
当我使用时:
Control.find({}).populate('contents.typeId')
.exec(function(error, posts) {
console.log(JSON.stringify(posts, null, "\t"));
});
它不会填充subBox和subObject字段:(如果我尝试访问subBox或subObject字段,它会给我未定义。 我做错了什么?
答案 0 :(得分:0)
首先,您需要获得该集合的模型:
var BoxModel = mongoose.connect(dbURI).model("box", box);
boxContents在架构中,但在对象中是内容,应该修改。 要创建要保存的对象,您需要以这种方式使用模型,然后您可以这样获取填充的数据:
var box1 = new BoxModel({
boxContents: [{
contentType: 'object',
typeId: {
subObject: object1._id
}
}]
});
BoxModel.find({}).populate('boxContents.typeId');
OR
BoxModel.find({}).populate({path:'boxContents.typeId'});