带有 C# 的 Mongo DB - 无论事务如何添加文档

迈替尼

我正在尝试使用我编写的一个简单示例来测试 Mongo DB 中新支持的事务。我正在使用 Mongo DB 版本 4.0.5 和驱动程序版本 2.8.1。它只是一个没有分片/副本的主实例。

我一定在下面的代码中遗漏了一些基本的东西。我创建了一个 Mongo 客户端、会话和数据库,然后开始一个事务,添加一个文档并中止事务。在此代码之后,我希望数据库中没有任何变化,但添加了文档。调试时,我还可以在InsertOne()使用 Robo 3T(Mongo 客户端 GUI)之后立即查看文档

知道我错过了什么吗?

        var client =  new MongoClient("mongodb://localhost:27017");
        var session = client.StartSession();
        var database = session.Client.GetDatabase("myDatabase", new MongoDatabaseSettings
        {
            GuidRepresentation = GuidRepresentation.Standard,
            ReadPreference = ReadPreference.Primary,
            WriteConcern = new WriteConcern(1, 
                new MongoDB.Driver.Optional<TimeSpan?>(TimeSpan.FromSeconds(30))),

        });

        var entities = database.GetCollection<MyEntity>("test");            

        session.StartTransaction();

        // After this line I can already see the document in the db collection using Mongo client GUI (Robo 3T), although I expect not to see it until committing
        entities.InsertOne(new MyEntity { Name =  "Entity" });

        // This does not have any effect
        session.AbortTransaction();

编辑:

可以将 MongoDB 作为 1 节点副本集运行,尽管我不确定独立副本集和 1 节点副本集之间有什么区别。看我下面的帖子。

在任何情况下,要使用已启动的事务,插入代码必须接收会话作为参数:

entities.InsertOne(session, new MyEntity { Name = "Entity" });

有了这 2 个更改,交易现在可以工作了。

拉克西斯·穆鲁坎纳帕

这本质上是 MongoDB 本身的一个属性。(更多在这里这里

事务仅在副本集设置中可用

为什么它不适用于独立实例?

通过子文档和数组,文档数据库 (MongoDB) 允许相关数据在单个数据结构内分层统一。可以使用原子操作更新文档,从而为其提供与关系数据库中的多表事务相同的数据完整性保证。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在带有$ match和$ in的Mongo db Java驱动程序中使用聚合?

来自分类Dev

Mongo DB,计数文档

来自分类Dev

Mongo DB和带有特殊字符的名称

来自分类Dev

带有通配符和相等条件的 mongo db 嵌套查询

来自分类Dev

Mongo DB导入具有多个文档的单个json文件

来自分类Dev

Mongo DB聚合$ lookup缓慢将索引添加到所有文档吗?

来自分类Dev

mongo db聚合如何获取所有字段

来自分类Dev

如何在mongo中插入带有日期的文档?

来自分类Dev

如何用数据填充缺失的字段到mongo db中的现有文档?

来自分类Dev

Mongo DB隔离的效率如何

来自分类Dev

Mongo DB隔离的效率如何

来自分类Dev

C# 中的 Mongo DB 实体绑定

来自分类Dev

如何从带有DB的DataGridView中选择行到C#中的新DataGridView

来自分类Dev

Mongo DB在C#中对具有相同数据结构的集合进行查询

来自分类Dev

在Mongo DB中查询带有条件的子元素的数量

来自分类Dev

带有选择标签Vue / Mongo DB的过滤器选项

来自分类Dev

Mongo DB find()查询嵌套文档

来自分类Dev

Mongo DB:从集合中删除文档

来自分类Dev

在mongo db中获取文档中数组中日期大于现在的所有元素

来自分类Dev

我想使用 java 在 mongo db 的集合中更新具有多个查询的文档

来自分类Dev

如何返回数组中不包含长类型的 Mongo db 集合中的所有文档,并更改这些元素的类型

来自分类Dev

如何使用C libbson从mongo db change流中提取字段

来自分类Dev

如何使用公式(或表达式)通过Mongo DB C#Drivers 4.2更新值?

来自分类Dev

Mongo db c# 驱动程序 - 如何通过 id 加入集合?

来自分类Dev

如何从Node中的Mongo(带有Mongoose)访问`findAndModify`方法?

来自分类Dev

如何返回所有带有mongo中字段值的文档?

来自分类Dev

如何在Mongo DB中合并文档数组

来自分类Dev

如何在Mongo DB中合并数组和文档字段

来自分类Dev

如何从Mongo DB中删除Angular页面中的选定文档?

Related 相关文章

  1. 1

    如何在带有$ match和$ in的Mongo db Java驱动程序中使用聚合?

  2. 2

    Mongo DB,计数文档

  3. 3

    Mongo DB和带有特殊字符的名称

  4. 4

    带有通配符和相等条件的 mongo db 嵌套查询

  5. 5

    Mongo DB导入具有多个文档的单个json文件

  6. 6

    Mongo DB聚合$ lookup缓慢将索引添加到所有文档吗?

  7. 7

    mongo db聚合如何获取所有字段

  8. 8

    如何在mongo中插入带有日期的文档?

  9. 9

    如何用数据填充缺失的字段到mongo db中的现有文档?

  10. 10

    Mongo DB隔离的效率如何

  11. 11

    Mongo DB隔离的效率如何

  12. 12

    C# 中的 Mongo DB 实体绑定

  13. 13

    如何从带有DB的DataGridView中选择行到C#中的新DataGridView

  14. 14

    Mongo DB在C#中对具有相同数据结构的集合进行查询

  15. 15

    在Mongo DB中查询带有条件的子元素的数量

  16. 16

    带有选择标签Vue / Mongo DB的过滤器选项

  17. 17

    Mongo DB find()查询嵌套文档

  18. 18

    Mongo DB:从集合中删除文档

  19. 19

    在mongo db中获取文档中数组中日期大于现在的所有元素

  20. 20

    我想使用 java 在 mongo db 的集合中更新具有多个查询的文档

  21. 21

    如何返回数组中不包含长类型的 Mongo db 集合中的所有文档,并更改这些元素的类型

  22. 22

    如何使用C libbson从mongo db change流中提取字段

  23. 23

    如何使用公式(或表达式)通过Mongo DB C#Drivers 4.2更新值?

  24. 24

    Mongo db c# 驱动程序 - 如何通过 id 加入集合?

  25. 25

    如何从Node中的Mongo(带有Mongoose)访问`findAndModify`方法?

  26. 26

    如何返回所有带有mongo中字段值的文档?

  27. 27

    如何在Mongo DB中合并文档数组

  28. 28

    如何在Mongo DB中合并数组和文档字段

  29. 29

    如何从Mongo DB中删除Angular页面中的选定文档?

热门标签

归档