MongoDb C#驱动程序通过一次原子操作即可更新多个文档 - c#

我想问你下面的代码是否将在一个原子操作中执行。我正在使用mongodb c#驱动程序。

该方法的输入是我要更新的对象的ID列表。

public void Update(IEnumerable<string> ids)
{
    var query = Query<T>.Where(t => ids.Contains(t.Id));
    var update = Update.Set("Modified", DateTime.Now); //this is just example of update

    var options = new MongoUpdateOptions {Flags = UpdateFlags.Multi};

    Collection.Update(query, update, options);
}

当我有数以百万计的文档要更新时,我对这种情况很感兴趣。如果在此更新期间出现故障(电源或硬件问题),将会怎样?数据库将保持一致状态吗?

谢谢。

参考方案

MongoDB不支持事务或原子多文档。
MongoDB仅对一个文档执行原子操作。

您可以在the documentation of Mongodb中进行检查

因此,如果使用查询1000文档进行更新,并且服务器在此操作期间崩溃,则某些文档可能会更新,而其他文档则不会。

MongoDB Fluent界面。尝试投影子文档属性,而忽略父文档属性 - c#

我有一个包含子文档的父文档(它不是数组,只是1:1关系)。{ _id: ObjectId(....) prop1 : value1 prop2 : value2 subdoc : { subProp1 : subPropValue1 subProp2 : subPropValue2 } } 我正在尝试使用Projection仅包括subProp1和subPr…

更改以字符串形式存储在MongoDB中文档中的枚举值 - c#

我有一个类,里面有一个枚举属性。保存整个文档时,由于以下文档的.NET表示形式中的属性,该属性以字符串形式写入数据库。public enum Status { Good, Bad } public class Document { [BsonRepresentation(BsonType.String)] public Status Status { get…

如何在MongoDB C#中将IndexOf与Builders过滤器一起使用 - c#

我正在尝试过滤这样的集合Builders<myClass>.Filter.Where(d => d.Name.IndexOf(".") > length) 但是得到这个错误:  System.InvalidOperationException:不支持{document} {Name} .IndexOf(“。”)。有…

使用MongoDB和C#在数组中查询深度嵌套的对象 - c#

我对MongoDB相当陌生,已经面临着艰巨的挑战。我正在尝试从具有对象的数组中的对象中获取一个元素(如果有道理)。这是文档的外观以及我要获取的内容:因此,基本上结构如下:选项菜单OptionMenuSubjectOptionMenuItem为了获得我匹配的OptionMenuItem,使用MongoDB Compass工具中的聚合管道工具将其拉下[{ $un…

Mongo Atlas-低连接限制? - c#

我目前正在测试mongo地图集的免费层,但是我反复遇到连接限制问题(免费层为100)。我在具有许多服务的Azure Service Fabric应用程序中使用该数据库,该数据库将在多个节点上运行(尽管目前,我大多只是使用单个节点本地群集在本地运行)。对我来说,100个连接似乎非常低,我知道它是一个免费层,但即使是较低层的付费集群也有一个较低的限制(https…