mongodb - Mongodb/嵌套事务:在另一个不工作的打开事务
问题描述
我在我的网络服务器中使用 MongoDb 4.2。当我在全局会话/事务 (T1) 中打开会话/事务 T2 时,T2 内的提交将保留在数据库中,并且无法在全局事务 T1 中取消。
我们如何实现这个嵌套事务?我应该在我的网络服务器中只打开一个单例会话并在所有更新操作中使用它吗?
这是一个例子:
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事务与会话相关联;在任何给定时间,您最多可以为一个会话打开一个事务。
查看您的示例,您应该尝试将所有图书订单删除打包在一个事务中。您甚至可以在事务中使用collection.deleteMany() 。
还值得注意的是,如果会话结束并且有一个打开的事务,事务将中止。
推荐阅读
- vb.net - 如何使用服务帐户凭据(json 格式)在 VB.Net 中使用 GMail API 访问我的 gmail 帐户?
- sql - 在 2 个案例参数(日期范围和行数)之间循环 | SQL Server 2012
- html - 如何从数组数据库中获取 id
- python - Python热图方程
- jquery - 如何对 HTML 表格列中的值求和
- sql - 计算表中序列中相同的行
- android - 协程延续在内部是如何工作的?
- c# - 没有 Filterattribute 不会调用自定义属性
- javascript - 如何在按钮单击时复制 json 输出?
- python - 为什么我的递归永远不会在我的井字游戏 minimax 算法中结束(在 Python3 中)?