我正在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与会话相关联;在任何给定时间,一个会话最多可以有one个开放事务。
[以您的示例为例,您应尝试将所有预订订单清除打包在一个事务中。您甚至可以在交易中使用collection.deleteMany()。
还值得注意的是,如果会话结束并且具有打开的事务,则该事务将中止。