Mongodb / Nested事务:在另一个不起作用的事务中打开事务

问题描述 投票:0回答:1

我正在Web服务器中使用MongoDb 4.2。当我在全局会话/事务(T1)中打开会话/事务T2时,T2中的提交将保留在数据库中,并且无法在全局事务T1中被取消。

我们如何实现此嵌套事务?我是否应该在Web服务器中仅打开一个单例会话并将其用于所有更新操作?

这里是一个例子:

def remove_order_in_book(self, book, order):
        with self.start_session() as session:
            with session.start_transaction():
                book_collection.delete_one(..)

def remove_book_from_order(self, book):
   with client.start_session() as session:
         with session.start_transaction():
             orders = self.get_orders_of_book (book)
             for order in orders:
                self.remove_order_in_book(book, order)

谢谢您的任何想法!

mongodb transactions nested rollback
1个回答
0
投票

MongoDB Transactions与会话相关联;在任何给定时间,一个会话最多可以有one个开放事务。

[以您的示例为例,您应尝试将所有预订订单清除打包在一个事务中。您甚至可以在交易中使用collection.deleteMany()

还值得注意的是,如果会话结束并且具有打开的事务,则该事务将中止。

© www.soinside.com 2019 - 2024. All rights reserved.