与使用数组更新运算符$ 的以下查询等效的MongoDB C#驱动程序是什么

来自https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#up。 S [%3Cidentifier%3E]

鉴于以下收集

{ "_id" : 1, "grades" : [ { "grade" : 80, "mean" : 75, "std" : 6 }, { "grade" : 85, "mean" : 90, "std" : 4 }, { "grade" : 85, "mean" : 85, "std" : 6 } ] } { "_id" : 2, "grades" : [ { "grade" : 90, "mean" : 75, "std" : 6 }, { "grade" : 87, "mean" : 90, "std" : 3 }, { "grade" : 85, "mean" : 85, "std" : 4 } ] } 

和查询

 db.students2.update( { }, { $set: { "grades.$[elem].mean" : 100 } }, { multi: true, arrayFilters: [ { "elem.grade": { $gte: 85 } } ] } ) 

如何使用C#驱动程序执行相同的查询? 目前我只是使用db.RunCommand对数据库运行查询,因为我看不到用当前驱动程序将其转换为C#的方法。

您可以使用BsonDocument和json string选项在c#下面尝试。 没有linq选项。

 var filter = Builders.Filter.Empty; var update = Builders.Update.Set("grades.$[elem].mean", 100); var arrayFilter = new BsonDocumentArrayFilterDefinition(new BsonDocument("elem.grade", new BsonDocument("$gte", 85))); var arrayFilter = new JsonArrayFilterDefinition("{ \"elem.grade\": { $gte: 85 } }"); var arrayFilters = new List { arrayFilter }; var updateOptions = new UpdateOptions(); updateOptions.ArrayFilters = arrayFilters; var result = collection.UpdateOne(filter, update, updateOptions);