我正在测试一个想法,并为讨论做了一些人为的示例。mongoosejs:从不同模式中填充objectId的数组
我有以下模式的型号:
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);
我已经成功地推动每一项以蒙戈的例子。这导致了三个集合了REFD阵列,其中包括innerOne和innerTwo对象的ObjectId的,从蒙戈的观点看起来不错:
{
"_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 }
所以这个结构却是正确的,它看起来好像填入功能只填入第一两个TY的PES。
我在推行什么可以执行的限制,还是有办法处理不同对象的人口?
我曾考虑过使用鉴别器来创建单个父类的所有模型子元素,但是我不希望如果这样做,我可能会使用关系数据库。
------编辑------ 在这一点上似乎并不像这是没有修改或创建一个插件是可行的。
对于任何人谁在想同样的事我现在决定回到更传统的方式,我创建了一个relatedRecordSchema,它存储一个Id和一个记录类型以及一些其他有用的元数据。这基本上推动了人口的逻辑到应用程序。
在我的使用案例中,这并不是那么糟糕,因为我并不总是想要填充所有各种相关记录,而是让应用程序或用户即时决定。
这不是一个答案,所以我会离开的问题打开希望有人采取主动,并建立一个插件;)
干杯 乙
嗯。不幸的是,这不起作用,无论哪个人群中第二个出现在阵列中都是独一无二的。所以看起来你可以在你喜欢的地方推出尽可能多的模型,但一次只能填充一个模型。我会继续玩。谢谢 – delProfundo