假设你有一个应用程序,其中来自用户的一个单操作涉及从不同集合更新多个文件。MongoDB - 如何确保多个更新都是成功的?
其实我有问题;-)
是什么做的最好的办法,以及如何确保要么一切都正确保存或取消操作?
im使用Mongoose
解甲 - 嵌套回调
假设两个用户id和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并且应该切换回关系数据库。 – duffymo 2014-09-19 20:11:05