如何在MongoDB C#驱动程序版本2中使用$定位符操作符

9

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

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 } }
   )
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);

5
我知道这个回答很晚了,但如果有其他人遇到这个问题,我尝试了s7vr的回答,使用了-1索引,并且得到了一个指向Mongo的FirstMatchingElement方法的异常,这解决了我的问题。
所以,与那个回答中的filter相同,但是将update替换为类似的东西。
var update = Builders<Student>.Update.Set(student => student.Grades.FirstMatchingElement(), 82);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接