c# - 如何使用 C# Mongodb 驱动程序类型化方法更新数组文档元素的字段

标签 c# arrays mongodb mongodb-csharp-2.0

使用 MongoDB C# 驱动程序版本 2.0.1 和 Mongodb 3.0,是否可以使用类型化方法来更新数组字段文档元素?

例如,我有以下文档:

{
     Name:"Ken",
     ContactNo:[ { Number:"123", Type:"Mobile"},
                  { Number:"456", Type:"Office"},
                  { Number:"531", Type:"Fax"}
                ]
 }

如何使用类型化 C# 方法执行以下操作:

1) 将 ContactNo 数组的所有元素的 Type 字段更新为“PABX

2) 将ContactNo数组文档元素的Type字段(其Number字段等于“123”)更新为“纤维

3) 更新 Contact 数组的第一个元素,并将其 Type 字段设置为“Unknown

最佳答案

  1. 目前无法使用位置运算符更新数组中的所有项目。请参阅this StackOverflow questionthis MongoDB issue 。但是,如果您提前知道数组中的元素数量(或者可以以某种方式获取它),那么这将起作用:

    var numberOfElementsInArray = 3;
    var filter = Builders<Contact>.Filter.Eq("Name", "Ken");
    var update = Builders<Contact>.Update.Combine(Enumerable.Range(0, numberOfElementsInArray)
            .Select(i => Builders<Contact>.Update.Set("ContactNo." + i + ".Type", "PABX")));
    collection.UpdateOneAsync(filter, update).Wait();
    
  2. 此代码将设置 Type ContactNo 中元素的属性带有 Number 的数组的123Fiber :

    var filter = Builders<Contact>.Filter.And(
            Builders<Contact>.Filter.Eq("Name", "Ken"),
            Builders<Contact>.Filter.Eq("ContactNo.Number", "123"));
    var update = Builders<Contact>.Update.Set("ContactNo.$.Type", "Fiber");
    collection.UpdateOneAsync(filter, update).Wait();
    
  3. 此代码将设置 Type ContactNo 中第一个元素的属性数组到Unknown :

    var filter = Builders<Contact>.Filter.Eq("Name", "Ken");
    var update = Builders<Contact>.Update.Set("ContactNo.0.Type", "Unknown");
    collection.UpdateOneAsync(filter, update).Wait();
    

请注意,所有这些代码都假设您有一个名为 Contact 的类。对应于您在问题中指定的数据(您的实际类可能被称为其他名称,我只是在这里将其称为 Contact ),并且 collectionIMongoCollection<Contact> 的一个实例。

例如:

var client = new MongoClient("mongodb://localhost:27017");
var collection = client.GetDatabase("your database").GetCollection<Contact>("your collection name");

关于c# - 如何使用 C# Mongodb 驱动程序类型化方法更新数组文档元素的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31877097/

相关文章:

c# - 何时在 .net 核心中配置 dbcontext?

c# - 更改默认的 ASP MVC 请求 header 以添加您自己的值

arrays - 重新排序两个数组的最佳算法,将公共(public)元素放在首位

javascript - 从 Node.js 中的 JSON 数组中读取一个值

java - Java 数组 - 尝试删除用户输入要求

json - Mongoose:将数据添加到返回的结果集中

c# - C# 中的内联 IF 语句

MongoDB 聚合 - $unwind 顺序文档是否与嵌套数组顺序相同

mongodb - 通过多个条件从嵌套数组中删除对象

c# - 将数据从 MySQL 数据库加载到 C# DGV