c# - 使用 MongoDB 和 C# 新驱动程序版本 (2.0) 从集合中更新嵌入式文档

标签 c# mongodb mongodb-.net-driver

我有一个带有嵌入式服务列表的模型:

public class Project
{
    public ObjectId Id { get; set; }
    public List<Service> Services { get; set; }
}

public class Service
{
    public int Id { get; set; }
    public MachineInfo Info { get; set; }
}

我想将匹配 projectId 和 serviceId 的 Info 属性修改为列表项。 对于老司机来说,是:

var result = collection.Update(
        Query.And(
          Query.EQ("_id", projectId),
          Query.ElemMatch("Services", Query.EQ("Id", serviceId))
        ), 
var update = Update.Set("Services.$.Info", newInfo);
Collection.Update(query, update);

但是使用新的驱动程序,我无法使用位置运算符“$”:

var filter = Builders<Project>.Filter.And(Builders<Project>.Filter.Eq(x => x.Id, projectId),
    Builders<Project>.Filter.ElemMatch(x => x.Services, x => x.Id == serviceId));
var update = Builders<Project>.Update.Set(x => x.$.Info, newInfo);
this.collection.UpdateOneAsync(filter, update);

知道怎么做吗?使用旧版驱动程序?

最佳答案

你可以在这里做两件事......要么像你在 1.x 中那样使用字符串......

Builders<Project>.Update.Set("Services.$.Info", newInfo);

或者使用 ElementAt(-1)

Builders<Project>.Update.Set(x => x.Services.ElementAt(-1).Info, newInfo);

关于c# - 使用 MongoDB 和 C# 新驱动程序版本 (2.0) 从集合中更新嵌入式文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29656680/

相关文章:

c# - 获取应用于通过 COM 接口(interface)公开的 C# 属性的帮助字符串属性

c# - ZedGraph 规模都搞砸了

MongoDB - 聚合 - 获取数组中的唯一项

c# - 使用 .Net Driver 2 在 MongoDB 集合中查找最大值

mongodb-.net-driver - 使用 C# 的新 (2.6) $cond 聚合框架?

mongodb - 将 mongo 查询的输出重定向到 csv 文件

javascript - Kendo MVC Treeview 获取所有选中的节点并将它们传递给 Controller

c# - RX 和异常处理

使用 w=0 的 Mongodb 更新保证

php - PHP 中的 MongoDB 3.4 排序规则