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

时间:2017-02-22 16:19:24

标签: mongodb mongodb-query mongodb-.net-driver

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

MongoDB有$ position运算符来执行此操作。但是在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 } }
   )

1 个答案:

答案 0 :(得分:7)

你可以尝试这样的事情。

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