如何使用mongoose保存多个文件?

我在这里有2个模型的userblog 。 所以当用户写博客时,我的路由器就像这样调用它们。

 Promise.all([ node.save(), user.save() ]).then(function (values) { //do something }).catch(function (err) { //print error }) 

正如您可能立即注意到的, save()不保证。 其中任何一个都可能失败,其余的都不会回滚。 我怎样才能确保他们都保存或回滚? 有人build议把blogs集合放在users内部,所以一切都在一个单一的文件,但这很难做博客排名,不是吗? 我也不确定在MongoDB中整合所有东西是不是一个好习惯。 如果文件很大,是否会导致性能问题(比如请求/秒)?

谢谢。

你不能使用Promise.all,你必须单独链接你的承诺。

 node.save().then(user.save).then(function(){//do something else}); 

你还必须努力工作,以获得像Promise.all一样的数组中的所有实体。 但是你真的需要吗? 您可以访问用户和节点实体。

经典的做法是使用asynchronous和系列:

 async.series({ node: node.save, user:user.save }, function(err, res){ // res is now equal to: {node:node, user:user} }); 

大多数人根本不用使用Mongo进行两阶段提交。 如果你真的需要这个,也许你正在使用错误的工具。

如果节点保存失败, 用户将不会被保存。 如果在不保存用户的情况下无法保存节点,请颠倒操作的顺序。 如果两者都必须更新,我可能会重新考虑我的数据模型。

如果你真的需要一个两阶段提交,你需要重新发明特定的车轮。 在文档中有一个配方。 或者你可以尝试一个声称做它的mongoose插件之一。