MongooseJS中的级联持久性

MongooseJS中的级联持久性,mongoose,Mongoose,MongooseJS是否直接或通过插件支持级联持久性 以下操作将把foo文档添加到foos集合中的数据库中,并正确保存文档包装: var fooSchema = new Schema({ name: String, value: Number }), fooModel = mongoose.model('Foo', fooSchema), wrapSchema = new Schema({ name: String, item: { type: Schema.Types.O

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

以下操作将把foo文档添加到foos集合中的数据库中,并正确保存文档包装:

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集合,但使用bar的_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;
  ...
});
是否有可能,或者更准确地说,建议第二种情况使用save上的中间件预挂钩执行级联save操作?

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