使用MongoDB和C#新驱动程序版本(2.0)更新嵌入式文档属性

塔兰·比克威斯

我在尝试更新嵌入式文档列表中的属性时遇到问题。我尝试对其进行部分更新的属性是“ CaseTaskDecision”类中的“ SelectedDecision”。

public class Case
{
    [BsonId]
    public ObjectId InternalId { get; set; }
    [BsonElement(elementName: "casetasks")]
    public List<CaseTask> CaseTasks { get; set; }
}

public class CaseTask
{
    [BsonId]
    public ObjectId InternalId { get; set; }

    [BsonElement(elementName: "caseTaskDecision")]
    public CaseTaskDecision CaseTaskDecision { get; set; }
}

public class CaseTaskDecision
{
    [BsonId]
    public ObjectId InternalId { get; set; }

    [BsonElement(elementName: "selectedDecision")]
    public string SelectedDecision { get; set; }
}

下面是mongodb文档的示例

{
    "_id" : ObjectId("5aff22845d02052ea80f7717"),
    "casetasks" : [
        {
            "_id" : ObjectId("000000000000000000000000"),
            "caseTaskDecision" : {
                "_id" : ObjectId("000000000000000000000000"),
                "selectedDecision" : null
            }
        }
    ]
}

我正在使用带有MongoDB界面的Azure DocumentDB后端。用于尝试和更新属性的C#代码为:

public async Task<UpdateResult> UpdateTaskDecision(string id, string taskId, string selectedDecision)
{
     var update = Builders<CaseAPI.Models.Case>.Update.Set("casetasks.$.castTaskDecision.selectedDecision", selectedDecision);
     return await _db.GetCollection<CaseAPI.Models.Case>(_collection).UpdateOneAsync<CaseAPI.Models.Case>(o => o.Id.Equals(id) && o.CaseTasks.Any(t => t.Id.Equals(taskId)), update);
}

关注点是上述代码中的“ Set”语句。我不确定如何引用正确的属性来部分更新嵌入式文档。

我对使用MongoDB非常陌生,这是第一次使用C#驱动程序。任何指向有用资源的指针或链接将不胜感激。

Pieperu

不幸的是,在撰写本文时,Azure Cosmos DB支持在MongoDB中的嵌入式阵列中更新单个项目。我们最初使用Cosmos,但由于缺乏对MongoDB的功能支持,我们最近已过渡到MongoDB Atlas。

要使用Cosmos实现所需的功能,您需要获取整个数组,更新所需的项(在代码中)并替换文档的整个array属性-效率很低。

值得检查一下Cosmos的功能和不支持的功能,因为它不喜欢某些操作,主要是围绕更新嵌入式数组中的项,即PullFilter

MongoDB API对MongoDB功能和语法的支持

例如,摘自以上文章:

数组更新运算符

$ pull(注意:不支持带条件的$ pull)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

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

MongoDB C#驱动程序-更新嵌入式文档数组中的所有字段

Mongodb通过C#驱动程序使用多个字段匹配更新嵌入式文档

Mongodb C#驱动程序Perform字符串包含对嵌入式文档中的属性的查询

MongoDB-更新嵌入式文档和文档本身

更新mongodb中arrays对象的arrays的嵌入式文档

更新Mongodb中的嵌入式文档:性能问题?

在mongodb中更新嵌套的嵌入式文档

使用C#获取和添加/更新多层嵌入式/嵌套MongoDB文档

MongoDB嵌入式文档数组:仅获取一个具有特定属性的嵌入式文档

MongoDB C# 驱动程序:如何将 $in 运算符用于嵌套的嵌入式文档?

何时使用嵌入式文档MongoDB

在MongoDB中的多个文档中更新多个嵌入式文档

如何使用Mongoclient更新单个文档的嵌入式文档列表字段?

查询MongoDB中的嵌入式文档

在mongodb中展开嵌入式文档

mongodb汇总嵌入式文档值

Mongodb对嵌入式文档的本机验证

mongodb嵌入式文档搜索

Mongodb嵌入式文档最佳实践

在 MongoDB 中搜索嵌入式文档?

返回特定的mongodb嵌入式文档

MongoDb $ match用于嵌入式文档

如何从nodejs mongodb本机驱动程序的嵌入式文档中找到单个元素?

MongoDb C#驱动程序可以与LINQ和动态文档一起使用吗?

使用mgo对mongoDB中的嵌入式文档进行部分更新

MongoDB-Mongoose:如何使用Mongoose同时更新两个单独的嵌入式文档?

在mongodb nodejs中更新双嵌套的嵌入式文档,而无需使用数字索引

使用C#驱动程序的MongoDB更新阵列