【发布时间】:2016-03-10 03:22:51
【问题描述】:
我正在测试一个想法,并制作了一些人为的示例供讨论。
我有以下架构的模型:
var outerSchema = new Schema({
title: String,
refD: [{type: Schema.ObjectId, ref: 'InnerOne'},
{type: Schema.ObjectId, ref: 'InnerTwo'}]
});
var innerOneSchema = new Schema({
title: String
});
var innerTwoSchema = new Schema({
turtle:String
});
var Outer = mongoose.model('Outer', outerSchema);
var InnerOne = mongoose.model('InnerOne', innerOneSchema);
var InnerTwo = mongoose.model('InnerTwo', innerTwoSchema);
我已经成功地将其中的每一个示例推送到 Mongo。这导致了三个带有 refD 数组的集合,其中包括 innerOne 和 innerTwo 对象的 ObjectId,从 mongo 的角度来看看起来不错:
{
"_id" : ObjectId("56625b7c752995f505637864"),
"title" : "LOOK AT MY CHILDREN!",
"refD" : [
ObjectId("56625b7c752995f505637862"),
ObjectId("56625b7c752995f505637863")
],
"__v" : 1
}
但是,当我这样使用填充命令时:
Outer
.findOne({title: 'LOOK AT MY CHILDREN!'})
.populate('refD')
.exec(function(err,res){
if(err) console.log(err);
console.log(res);
});
结果如下:
{ refD:
[ { __v: 0,
title: 'Im the first type inside!',
_id: 56625b7c752995f505637862 } ],
__v: 1,
title: 'LOOK AT MY CHILDREN!',
_id: 56625b7c752995f505637864 }
所以在结构上这是正确的,但它看起来好像填充函数只填充了两种类型中的第一种。
我是在突破可以执行的极限,还是有办法处理不同对象的数量?
我曾考虑使用鉴别器来使所有模型成为单个父类的子类,但我不希望这样做,如果我这样做,我不妨使用关系数据库。
--------编辑------ 在这一点上,如果不修改或创建插件,这似乎是不可行的。
对于任何有相同想法的人,我现在决定回到更传统的方法,我创建了一个 relatedRecordSchema,它存储了一个 Id 和一个记录类型以及一些其他有用的元数据。这实质上将填充逻辑推到了应用程序上。
在我的用例中,这还不错,因为我并不总是希望填充所有各种相关记录,而是让应用程序或用户即时决定。
这不是一个答案,所以我会留下这个问题,希望有人采取主动并构建一个插件;)
干杯 乙
【问题讨论】: