Я некоторое время боролся с этим. Вот мой документ.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);
Есть два параметра, передаваемые в эту функцию. Идентификатор и язык. Например, я хочу обновить свойство Content до "Welcome to Stackoverflow!"
для 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"
}
Так как я могу обновить только частичным свойство документа, не испортив другие свойства?
Нет, пример - именно то, что я хочу. Я хочу обновить Английский Контент, не затрагивая французскую собственность. В моем коде я прочитал документ, но не смог обновить английский контент с клиентской стороны, потому что я понятия не имею, как обновлять английский контент внутри строки
«doc.SetPropertyValue (« Содержимое »,« Добро пожаловать в Stackoverflow! »).);»
Возможно ли, что в DocumentDB возможно только обновление одного из дочерних свойств? –
Нет, замените или вставьте целые документы. –
Да, после некоторых исследований я понял, что обновление частичного свойства невозможно. Я в порядке со мной, что мне нужно заменить весь документ. Но моя проблема заключается в том, как обновить одно из дочерних свойств «Содержимое»: «Добро пожаловать!» и не влияет на другой «Контент»: «Bienvenue!». Единственный способ найти свойство документа - использовать «SetPropertyValue». Это моя проблема: у меня есть два свойства Content. Есть ли способ сделать что-то вроде SetPropertyValue («Контент», «Добро пожаловать в Stackoverflow!»). Где (Language = «En»)? Благодаря! –