2016-06-28 39 views
0

我一直在努力這一段時間。這是我的文檔。DocumentDB:如何更新部分屬性值

{ 
    "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 Stackoverflow!"); 

Document updated = await client.ReplaceDocumentAsync(doc); 

有傳入這個函數的兩個參數。 Id和語言。例如,我只想將屬性內容更新爲0​​,Id = "1"Language="En"。事情是我的代碼將刪除其他"Language": "Fr""Content": "Bienvenue!"部分和更新我的文件是這樣的:

{ 
    "id": "1", 
    "Scenario": "Welcome page", 
    "Language": "En", 
    "Content": "Welcome to Stackoverflow!", 
    "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 Stackoverflow!" 
     }, 
     { 
     "Language": "Fr", 
     "Content": "Bienvenue!" 
     } 
    ], 
    "LastModified": "2016-05-27T17:27:58.562-06:00", 
    "ModifiedBy": "admin", 
    "LastAccessed": "2016-06-13T10:27:58.562-06:00" 
} 

所以,我怎麼能只更新部分文件的屬性沒有搞亂其他屬性?

回答

0

我想您的示例可能會因您顯示當前結果(包括Fr/Bienvenue記錄)而關閉,但不管DocumentDB是否沒有更新。你必須閱讀文檔,更新它的客戶端,然後重新保存在舊的頂部。或者,您可以將您的翻譯列表非規範化爲具有「外鍵」的單獨文檔,並將其返回到與其相關的場景。

+0

不,這個例子正是我想要的。我想在不影響法國財產的情況下更新英文內容。在我的代碼中,我閱讀了文檔,但無法從客戶端更新英文內容,因爲我不知道如何僅更新行內的英文內容
「doc.SetPropertyValue(」Content「,」Welcome to Stackoverflow!「 );」
在DocumentDB中甚至有可能只更新其中一個子屬性? –

+0

不,請替換或插入整個文檔。 –

+0

是的,經過一番研究,我意識到不可能更新部分屬性。我不好意思替換整個文檔。但我的問題是如何更新兒童財產「內容」之一:「歡迎!」而不會影響另一個「內容」:「Bienvenue!」。我發現更新文檔屬性的唯一方法是使用「SetPropertyValue」。那我的問題:我有兩個內容屬性。有沒有辦法像SetPropertyValue(「內容」,「歡迎來到Stackoverflow!」)。在哪裏(Language =「En」)?謝謝! –