繁体   English   中英

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

[英]Update an embedded document from a collection using MongoDB and C# new driver version (2.0)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM