在MongooseJS中级联持久化

时间:2015-04-13 20:31:22

标签: mongoose

MongooseJS是否支持直接或通过插件进行级联持久性?

以下内容将foo文档添加到集合foos中的数据库中,并正确保存文档wrap

var fooSchema  = new Schema({ name: String, value: Number }),
    fooModel   = mongoose.model('Foo', fooSchema),
    wrapSchema = new Schema({ name: String, item: { type: Schema.Types.ObjectId } }),
    wrapModel  = mongoose.model('FooWrap', wrapSchema);

var foo = new fooModel({ name: 'First', value: 1 });
foo.save(function(err, data) {
  if (err) throw err;

  var wrap = new wrapModel({ name: 'Foo Wrapper', item: data });
  wrap.save(function (err, data) {
    if (err) throw err;
    ...
  });
});

据我了解,这种方法是正确的方法。由于Mongoose和MongoDB要求您独立保存文档。

因此,以下代码无法将bar添加到bars集合,但会将wrapbar的{​​{1}}一起保存。有一个_id集合,但没有barwraps集合。

bars

是否有可能或者更准确地说,第二种情况是使用中间件var barSchema = new Schema({ name: String, value: Number }), barModel = mongoose.model('Bar', barSchema), wrapSchema = new Schema({ name: String, item: { type: Schema.Types.ObjectId } }), wrapModel = mongoose.model('BarWrap', wrapSchema), bar = new barModel({ name: 'Second', value: 1 }), wrap = new wrapModel({ name: 'Bar Wrapper', item: bar }); wrap.save(function(err, data) { if (err) throw err; ... }); 挂钩执行级联保存操作?

1 个答案:

答案 0 :(得分:0)

尝试将bar对象保存到wrapModel,然后在wrap中使用其ObjectId。