使用 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
”
最佳答案
目前无法使用位置运算符更新数组中的所有项目。请参阅this StackOverflow question和 this 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();
此代码将设置
Type
ContactNo
中元素的属性带有Number
的数组的123
至Fiber
: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();
此代码将设置
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
),并且 collection
是 IMongoCollection<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/