DocumentDB:如何更新部分 属性 值

DocumentDB: How to Update Partial Property Value

我已经为此苦苦挣扎了一段时间。这是我的文档。

{
  "id": "1",
  "Scenario": "Welcome page",
  "Translations": [
    {
      "Language": "En",
      "Content": "Welcome!"
    },
    {
      "Language": "Fr",
      "Content": "Bienvenue!"
    }
  ],
  "LastModified": "2016-05-27T17:27:58.562-06:00",
  "ModifiedBy": "admin",
  "LastAccessed": "2016-06-13T10:27:58.562-06:00"
}

这里是我更新 属性 的代码(我在这里硬编码了要修改的值):

SqlQuerySpec query = new SqlQuerySpec()
{
    QueryText = "SELECT c.id, c.Scenario, t.Language, t.Content, c.LastModified, c.ModifiedBy, c.LastAccessed FROM MultiLanguage as c join t in c.Translations where c.id = @Id and t.Language = @Language",
    Parameters = new SqlParameterCollection() { new SqlParameter("@Id", Id), new SqlParameter("@Language", Language) }
};

Document doc = client.CreateDocumentQuery<Document>(
    collectionLink, query).AsEnumerable().FirstOrDefault();

doc.SetPropertyValue("Content", "Welcome to Whosebug!");

Document updated = await client.ReplaceDocumentAsync(doc);

有两个参数传递给这个函数。身份和语言。例如,对于 Id = "1"Language="En",我只想将 属性 内容更新为 "Welcome to Whosebug!"。问题是我的代码将删除其他 "Language": "Fr""Content": "Bienvenue!" 部分并将我的文档更新为如下内容:

{ 
    "id": "1",
    "Scenario": "Welcome page",
    "Language": "En",
    "Content": "Welcome to Whosebug!",
    "LastModified": "2016-05-27T17:27:58.562-06:00",
    "ModifiedBy": "admin",
    "LastAccessed": "2016-06-13T10:27:58.562-06:00"
}

但我想要的是:

{
    "id": "1",
    "Scenario": "Welcome page",
    "Translations": [
      {
        "Language": "En",
        "Content": "Welcome to Whosebug!"
      },
      {
        "Language": "Fr",
        "Content": "Bienvenue!"
      }
    ],
    "LastModified": "2016-05-27T17:27:58.562-06:00",
    "ModifiedBy": "admin",
    "LastAccessed": "2016-06-13T10:27:58.562-06:00"
}

那么我怎样才能只更新文档的部分 属性 而不会弄乱其他属性?

DocumentDB 没有适当的更新。您必须阅读文档,在客户端更新它,然后将其重新保存在旧文档的顶部。或者,您可以将翻译列表非规范化为单独的文档,并 "foreign keys" 返回到它相关的场景。