我想知道为引用另一个Schema的Schema添加CRUD端点的最佳实践。我有一个Company
架构和一个Address
架构,其中Company
将在其模型中定义一个Address
ID数组,如下所示:
CountrySchema = new Schema({
addresses: [{
type: Schema.Types.ObjectId,
ref: 'Address'
}]
});
在创建新公司时,我首先想到的是遍历地址并在继续保存公司之前在数据库中创建它们。一个非常烦人的问题可能是,如果3个地址保存,1个没有,我将需要返回并删除这3个地址。
在创建公司之前创建地址可能是这样的:
function CreateModel1WithStuff(data, cb) {
if (data.child) { // Save child model first
data.child = Model2(data.child);
data.child.save(function(err) {
cb(err, err ? null : Model1(data));
});
} else { // Proceed without dealing with child
cb(null, Model1(data));
}
}
CreateModel1WithStuff({
foo: 'abc',
child: {
bar: 'cba'
}
}, function(err, doc) {
doc.save();
});
另一个问题是更新公司的地址,是否最好使用地址端点分别更新地址?或者,最好将新地址发送到公司端点,并让该端点检查是否应更新地址。这有点类似于前一点。