我在尝试更新嵌入式文档列表中的属性时遇到问题。我尝试对其进行部分更新的属性是“ 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#驱动程序。任何指向有用资源的指针或链接将不胜感激。
不幸的是,在撰写本文时,Azure Cosmos DB不支持在MongoDB中的嵌入式阵列中更新单个项目。我们最初使用Cosmos,但由于缺乏对MongoDB的功能支持,我们最近已过渡到MongoDB Atlas。
要使用Cosmos实现所需的功能,您需要获取整个数组,更新所需的项(在代码中)并替换文档的整个array属性-效率很低。
值得检查一下Cosmos的功能和不支持的功能,因为它不喜欢某些操作,主要是围绕更新嵌入式数组中的项,即PullFilter
例如,摘自以上文章:
数组更新运算符
$ pull(注意:不支持带条件的$ pull)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句