Azure DocumentDB - 将对象插入文档数组?

时间:2014-11-16 19:10:06

标签: c# azure azure-cosmosdb

我正在开发一个简单的问答论坛。我想使用Azure DocumentDB。

如何在DocumentDB中添加现有问题文档的答案?

在我的情况下,我已经完成了与问题相同类型的答案列表:

public List<Announcement>  { get; set; }

我的文档对象如下所示:

public class Announcement
{
    [JsonProperty(PropertyName = "id")]
    public string ID { get; set; }

    [JsonProperty(PropertyName = "userid")]
    public int UserID { get; set; }

    [JsonProperty(PropertyName = "username")]
    public string UserName { get; set; }

    [JsonProperty(PropertyName = "useripaddress")]
    public string UserIPAddress { get; set; }

    [JsonProperty(PropertyName = "body")]
    public string Body { get; set; }

    [JsonProperty(PropertyName = "tags")]
    public List<string> Tags { get; set; }

    [JsonProperty(PropertyName = "datecreate")]
    public DateTime DateCreate { get; set; }

    [JsonProperty(PropertyName = "isedited")]
    public bool IsEdited { get; set; }

    [JsonProperty(PropertyName = "dateedit")]
    public DateTime DateEdit { get; set; }

    [JsonProperty(PropertyName = "imageaddonid")]
    public string ImageAddonId { get; set; }

    [JsonProperty(PropertyName = "imageaddonsource")]
    public string ImageAddonSource { get; set; }

    [JsonProperty(PropertyName = "answers")]
    public List<Announcement>  { get; set; }

}

我没有在DocumentClient中看到任何更新方法:/。

2 个答案:

答案 0 :(得分:5)

对我来说,您需要使用ReplaceDocumentAsync方法来更新文档。

据我所知,你需要更换整个文件;因为当你改变某些东西时,你更新整个文档而不是它的一部分。

您可以查看有关方法here

的文档

答案 1 :(得分:2)

目前您无法更新部分文档,您必须更新整个文档。更新文档的一部分是经常请求的功能,您可以投票给Microsoft以便将来添加它。在Azure的Uservoice上执行此操作:https://feedback.azure.com/forums/263030-documentdb/suggestions/6693091-be-able-to-do-partial-updates-on-document

在任何情况下,您都应该重新考虑是否要将嵌入答案放入问题本身。

根据文章Modeling data in DocumentDB,您应该嵌入

  • 实体之间包含关系。

  • 实体之间存在一对一的关系。

  • 嵌入式数据不经常更改。

  • 嵌入式数据不会无限制地增长。

  • 嵌入数据是文档中数据的组成部分。

如果你看一下粗体的项目符号,看起来问题里面的答案可能不是一个好主意,因为你可能有数千个答案,问题文档会经常变化。

相反,你可以拥有

  • 每个答案都定义为文档并引用了问题,因此您只需在有人添加答案时添加答案文档。这是最简单的选择。
  • 或者您可以定义由100个答案组成的文档,这样它也不会增长太多。但那需要更多的计划来管理。