如何解决Mongodb中写入或添加过程失败的问题

时间:2013-12-27 23:03:27

标签: node.js mongodb express

所以我一直试图将这个问题包围好几个星期,但我似乎无法弄明白。所以MongoDB没有能力处理回滚,因为我们通常理解它们(例如,当客户端向数据库添加信息时,例如用户名,但在注册过程中退出。现在DB留下了一些“悬挂“与任何事物无关的信息.MongoDb如何处理?或者如果没有人能回答这个问题,也许他们可以指出一个可以来源的例子?谢谢。

1 个答案:

答案 0 :(得分:0)

MongoDB不支持事务,您不能执行原子多语句事务以确保一致性。您一次只能对单个集合执行原子操作。在处理NoSQL数据库时,您需要尽可能多地验证数据,他们很少抱怨某些事情。有一些解决方法或模式可以实现SQL类交易。例如,在您的情况下,您可以将用户的信息存储在临时集合中,检查数据有效性,然后将其存储到用户的集合中。

这应该是直截了当的,但是当我们处理多个文档时,事情变得更加复杂。在这种情况下,您需要为事务创建指定的collection。例如,

transaction collection
{
  id: ..,
  state : "new_transaction",
  value1 : values From document_1 before updating document_1,
  value2 : values From document_2 before updating document_2
}      
// update document 1
// update document 2

Ooohh喔!!更新document 1 or 2时出了什么问题?不用担心,我们仍然可以从transaction collection恢复旧值。 此模式称为补偿,以模仿SQL的事务行为。