2016-06-28 2 views
0

나는 잠시 동안이 문제에 시달렸습니다. 여기 내 문서가 있습니다. 이 함수에 전달 된 두 개의 매개 변수가 있습니다DocumentDB : 부분 속성 값을 업데이트하는 방법

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": "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" 
} 

그리고

는 속성을 (내가 여기에 수정 될 값을 하드 코딩 한) 업데이트 내 코드입니다. 이드와 언어. 예를 들어 Id = "1"Language="En"에 대해 콘텐츠 콘텐츠를 "Welcome to Stackoverflow!"으로 업데이트하고 싶습니다. 건은이 같은 내 문서를 다른 "Language": "Fr", "Content": "Bienvenue!" 부분을 제거하고 업데이트 할 것입니다 내 코드 :

그래서
{ 
    "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" 
} 

것은 어떻게 부분적으로 만 업데이트 할 수 있습니다

{ 
    "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" 
} 

는하지만 내가 원하는 것은 이것이다 다른 속성을 어지럽히 지 않고 문서의 속성?

답변

0

Fr/Bienvenue 레코드를 포함하여 현재 결과를 표시하면 예제가 사용하지 않을 수도 있지만 관계없이 DocumentDB는 업데이트되지 않습니다. 문서를 읽고 클라이언트 쪽을 업데이트 한 다음 이전 문서의 맨 위에 다시 저장해야합니다. 또는 번역 목록을 관련된 시나리오로 돌아가는 "외래 키"가있는 별도의 문서로 역 정규화 할 수 있습니다.

+0

아니요, 예는 제가 원하는 것입니다. 프랑스어 속성에 영향을주지 않고 영어 콘텐츠를 업데이트하고 싶습니다. 내 코드에서이 문서를 읽었지만 클라이언트 쪽에서 영어 콘텐츠를 업데이트 할 수 없었습니다. 왜냐하면
"doc.SetPropertyValue ("Content ","Welcome to Stackoverflow! "); "
DocumentDB에서 하위 속성 중 하나만 업데이트 할 수 있습니까? –

+0

아니요, 전체 문서를 바꾸거나 삽입하지 마십시오. –

+0

그래, 일부 연구 후에 부분 속성을 업데이트 할 수 없다는 것을 깨달았습니다. 나는 전체 문서를 교체해야한다는 것은 잘 알고있다. 하지만 내 문제는 자식 속성 "콘텐츠"중 하나를 업데이트하는 방법입니다 : "환영합니다!" 또 하나의 "콘텐츠"에 영향을 미치지 않습니다 : "Bienvenue!". 문서 속성을 업데이트하는 유일한 방법은 "SetPropertyValue"를 사용하는 것입니다. 내 문제 : 나는 두 개의 콘텐츠 속성이 있습니다. SetPropertyValue ("Content", "Welcome to Stackoverflow!")와 같은 일을 할 수있는 방법이 있나요? (Language = "En")? 감사! –