如何在 MongoDB C# 驱动程序版本 2 中使用 $ 位置运算符

问题描述 投票:0回答:2

我需要从文档的数组子文档中更新一个元素的字段。

MongoDB 有 $ 位置运算符来执行此操作。但在 MongoDB C# 驱动程序版本 2 中似乎不支持该运算符。

我怎样才能实现这个目标?

文件:

{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }

预期查询:

db.students.update(
     { _id: 1, grades: 80 },
     { $set: { "grades.$" : 82 } }
   )
mongodb mongodb-query mongodb-.net-driver
2个回答
14
投票

你可以尝试这样的事情。

var builder = Builders<Student>.Filter;
var filter = builder.Eq(student=> student.Id, 1) & builder.ElemMatch(student => student.Grades, x => x == 80);

var builder = Builders<Student>.Update;
var update = builder.Set(student => student.Grades[-1], 82);

var result = collection.UpdateOne(filter, update);

0
投票

我知道这是一个很晚的答案,但如果其他人遇到这个问题,我尝试使用 -1 索引尝试 s7vr 的答案,并得到一个指向 Mongo 的 FirstMatchingElement 方法的异常,这解决了我的问题。

所以它与该答案中的

filter
相同,但将
update
替换为类似

var update = Builders<Student>.Update.Set(student => student.Grades.FirstMatchingElement(), 82);
© www.soinside.com 2019 - 2024. All rights reserved.