为什么Mongoid中没有“事务”方法?

时间:2011-11-02 08:23:00

标签: mongodb transactions mongoid

有时我们想要保存一些彼此不直接相关的对象。其中一个或几个可能会发生故障。如果没有“交易”策略,我们如何保存全部或不保存?

5 个答案:

答案 0 :(得分:4)

因为Mongodb不支持交易。 MongoDB为单个文档的操作提供原子性。查看herehere

的原因

答案 1 :(得分:2)

我不是那么进入Mongoid,但如果不存在事务,你可能只是检查是否有任何对象#valid?,如果是,那就不要保存所有对象。

答案 2 :(得分:1)

你做不到。如果这是一个硬性要求,您必须将相关对象嵌入到彼此中,以便可以使用原子更新对其进行修改,或者您需要找到另一个持久性解决方案。 MongoDB做了很多事情,但交易不是其中之一。

答案 3 :(得分:1)

从3.6开始,MongoDB提供session

s = Mongoid.client(:default).start_session
s.start_transaction
s.commit_transaction

有关Session类的详细信息,请参见here

答案 4 :(得分:1)

从MongoDB 4.0(manual)开始,副本集中支持多文档事务

从MongoDB 4.2(manual)开始,多文档事务在分片群集中可用

但是交易很慢,如果主要考虑性能,则应避免交易(参见非规范化字段)