我知道 MongoDB 不像关系数据库那样支持事务,但我仍然想知道如何实现多个操作的原子性。在网上搜寻,我看到人们提到没有交易的交易 http://www.infoq.com/presentations/Transactions-without-Transactions。通读幻灯片后,我仍然不清楚如何使用 Mongoose.js 来实现这一点。
以这段代码片段为例:
player.save(callback1);
story.save(callback2);
如何实现回调1和回调2以便它们一起成功或一起失败?
如果您确实必须跨多个文档类型(在单独的集合中)进行事务,那么实现此目的的方法是使用一个存储要执行的操作的表。
db.actions.insert(
{ actions: [{collection: 'players', _id: 'p1', update: {$set : {name : 'bob'} } },
{collection: 'stories', _id: 's1', update: {$set : {location: 'library'} } }], completed: false }, callback);
这个插入是原子的,并且一次性完成。然后,您可以执行“actions”集合中的命令,并将它们标记为完成或在完成时删除它们,并在它们全部完成时调用原始回调。仅当您的操作处理循环是唯一更新数据库时,这才有效。当然,你必须停止使用 mongoose,但越早这样做越好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)