Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose-保存时更新引用的文档_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript Mongoose-保存时更新引用的文档

Javascript Mongoose-保存时更新引用的文档,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,如果我有一个模式,其中包含对另一个模式的引用数组,是否有一种方法可以使用一个端点更新这两个文档 这是我的模式: CompanySchema = new Schema({ addresses: [{ type: Schema.Types.ObjectId, ref: 'Address' }] }); 我想向/companys/:id/edit发送一个带有完整地址的公司。有了这个端点,我想同时编辑公司和地址上的属性 在Rails中,您可以使用类似嵌套属性的东西来执行一个大型

如果我有一个模式,其中包含对另一个模式的引用数组,是否有一种方法可以使用一个端点更新这两个文档

这是我的模式:

CompanySchema = new Schema({
  addresses: [{
    type: Schema.Types.ObjectId,
    ref: 'Address'
  }]
});
我想向
/companys/:id/edit
发送一个带有完整
地址的
公司
。有了这个端点,我想同时编辑
公司
地址
上的属性

Rails
中,您可以使用类似嵌套属性的东西来执行一个大型
更新
调用,它将更新
公司
,并更新或添加
地址


您知道如何在
Mongoose
中执行此操作吗?

级联保存在
Mongoose
()中不受本机支持

但是有一些插件(例如:)在嵌套系统上实现了这种行为

记住mongodb是,通过各种insert()/update()操作调用实现“大保存”,您(或插件)必须处理错误并回滚

级联保存的示例:

company.save()
  .then(() => Promise.all(company.addresses.map(address => {
    /* update fkeys if needed */
    return address.save()
    }))
  .catch(err => console.error('something went wrong...', err))

考虑到这正处于开发的早期阶段,如果我想做这样的事情,那么替换
Mongoose
甚至
MongoDB
来实现这一点是有意义的吗?最好只有一个页面,我可以在其中更新公司及其地址,因此在这种情况下,最好使用不同的数据库或重新构建我的模型,对吗?如果确实需要将其保存在事务中以实现强一致性,最好使用RDBMS引擎。但我认为这不是你的情况,你可以通过自定义级联保存逻辑成功地处理它。我知道了,是的,我查看了你提到的级联关系库,但老实说,这方面的文档让我非常困惑,甚至不知道从何处开始尝试这种逻辑。所以不确定该朝哪个方向走。据我所知,我将通过
向我的
地址
添加
$,但我不确定从那里该怎么办。例如,我想将我完整的
公司
对象传递到
创建
端点或
更新
端点,并保存/更新相关的
地址
,如果逻辑简单,您可以自己实现。我在mongoose中添加了一个使用内置承诺支持的示例(未经测试)。是否可以尝试一下,应该简单到只添加$through并应用您提到的保存逻辑?