Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MongoDB和C#新驱动程序版本(2.0)更新嵌入式文档属性_C#_Mongodb_Azure Cosmosdb - Fatal编程技术网

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

使用MongoDB和C#新驱动程序版本(2.0)更新嵌入式文档属性,c#,mongodb,azure-cosmosdb,C#,Mongodb,Azure Cosmosdb,我在尝试更新嵌入文档列表中的属性时遇到问题。我试图对其进行部分更新的属性是“CaseTaskDecision”类中的“SelectedDecision” 我正在使用带有MongoDB接口的Azure DocumentDB后端。用于尝试和更新属性的C#代码为: public async Task<UpdateResult> UpdateTaskDecision(string id, string taskId, string selectedDecision) { var u

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

我正在使用带有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);
}
公共异步任务UpdateTaskDecision(字符串id、字符串taskId、字符串selectedDecision)
{
var update=Builders.update.Set(“casetasks.$.castTaskDecision.selectedDecision”,selectedDecision);
返回wait _db.GetCollection(_collection).UpdateOneAsync(o=>o.Id.Equals(Id)&&o.CaseTasks.Any(t=>t.Id.Equals(taskId)),update);
}
关注点是上述代码中的“Set”语句。我不知道如何引用正确的属性来对嵌入文档进行部分更新


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

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

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

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

例如,摘自上述文章:

数组更新运算符


$pull(注意:$pull with condition不受支持)

目前我正在使用解决方案更新整个嵌入文档。更新嵌入文档中属性的功能目前正在开发中。
{
    "_id" : ObjectId("5aff22845d02052ea80f7717"),
    "casetasks" : [
        {
            "_id" : ObjectId("000000000000000000000000"),
            "caseTaskDecision" : {
                "_id" : ObjectId("000000000000000000000000"),
                "selectedDecision" : null
            }
        }
    ]
}
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);
}