【发布时间】:2014-11-14 12:03:54
【问题描述】:
假设您有一个应用,其中用户的一个单个操作涉及从不同集合更新多个文档。
我实际上有 两个 问题 ;-)
最好的方法是什么?如何确保正确保存所有内容或取消操作?
我正在使用Mongoose
解决方案A - 嵌套回调
假设 userId 和 eventId 都是由客户端 POST 调用或通过套接字提供的
User.findById(userId,{},function(err,myUser){
if(err){
console.log('Error updating user...');
return;
}
else{
Event.findById(eventId,{},function(err,myEvent){
if(err){
console.log('Error updating user's Event...');
return;
}else{
console.log('Both user and event were successfully updated');
socket.emit('Update success!') || res.send(...);
});
});
解决方案B - 并行调用
User.findById(userId,{},function(err,myUser){
if(err){
console.log('Error updating user...');
return;
}
else{
console.log('Success updating user');
socket.emit('..') || res.send('...');
});
Event.findById(eventId,{},function(err,myEvent){
if(err){
console.log('Error updating user's Event...');
return;
}else{
console.log('Success updating Event');
socket.emit('Update success!') or res.send(...);
});
假设从一开始就知道 userId 和 eventId,解决方案 B 似乎明显更快。无论如何,在这两种情况下,只有在所有写操作都成功的情况下,如何确保对数据库执行 WRITE 操作?
我必须这样做是否意味着我的架构设计得不好,我应该合并信息?
感谢您的回复
【问题讨论】:
-
这表明你真的想要 ACID,应该切换回关系数据库。
标签: mongodb mongoose mongodb-query nosql