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

gar*_*thb 1 c# mongodb mongodb-query mongodb-.net-driver

来自https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#up。S [%3C标识符%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 }
   ]
}
Run Code Online (Sandbox Code Playgroud)

并查询

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

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

use*_*814 6

您可以尝试使用下面的 c#BsonDocument和 json 字符串选项。没有 linq 选项。

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