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

Posted

技术标签:

【中文标题】如何在 MongoDB C# 驱动程序版本 2 中使用 $ 位置运算符【英文标题】:How to use $ positional operator in MongoDB C# driver version 2 【发布时间】:2017-07-12 19:41:21 【问题描述】:

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

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  
   )

【问题讨论】:

【参考方案1】:

你可以试试这样的。

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

【讨论】:

以上是关于如何在 MongoDB C# 驱动程序版本 2 中使用 $ 位置运算符的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 驱动程序更新 MongoDB 数组中的子文档

从 C# 驱动程序执行 MongoDB Eval 函数(MongoDB 版本 2.4)

如何在 2.1 MongoDB C# 驱动程序中使用地理空间查询?

C#版的mongodb最新的官方驱动2.4.0版本

使用 ProjectionDefinition 和 c# 驱动程序的 Mongodb 组聚合

如何在 C# 的 MongoDB 驱动程序中应用软删除过滤器?