2012-06-25 3 views
3

기존 문서에 속성을 추가하고 싶습니다 (단서 양식 http://ravendb.net/docs/client-api/partial-document-updates 사용). 하지만 추가하기 전에 그 속성이 내 데이터베이스에 이미 있는지 확인하고 싶습니다.RavenDB에 속성이 있는지 확인하십시오.

달성하기위한 "특별한, 적절한 ravendB 방법"이 있습니까?
또는 문서를로드하고이 속성이 null인지 확인하십시오.

+2

여기 토론 참조 : 를 https://groups.google.com/group/ravendb/browse_thread/thread/cf5617b76d40d915/6b07812282999237? lnk = gst & q = 속성 + 존재 # 6b07812282999237 –

답변

0

집합 기반 데이터베이스 업데이트를 사용하여이 작업을 수행 할 수 있습니다. 다행스럽게도 JavaScript를 사용하여 수행 할 수 있습니다. 다행스럽게도 C#과 매우 유사하기 때문에 누구나 쉽게 사용할 수 있습니다. 다음은 방금 실행 한 업데이트의 예입니다.

: 당신은 당신의 스크립트에서 오류가 원하지 않는 결과를 얻을 수 있기 때문에 매우 조심이 일을해야합니다. 예를 들어, 내 코드 CustomId '1234-1'같은 것을 포함합니다. 스크립트를 작성한 첫 번째 반복에서 나는 다음을 가졌습니다.

product.Order = parseInt(product.CustomId.split('-')); 

주의 분할 후 인덱서를 잊어 버렸습니다. 결과? 오류, 맞죠? 아니. 주문에는 12341의 가치가있었습니다! 주의해야하고 철저히 테스트해야합니다.

예 :

작업은 제품 속성 (모음)를 가지고 있는데 기존 제품에 새로운 주문 속성을 추가 해요.

ravenSession.Advanced.DocumentStore.DatabaseCommands.UpdateByIndex(
    "Raven/DocumentsByEntityName", 
    new IndexQuery { Query = "Tag:Jobs" }, 
    new ScriptedPatchRequest { Script = 
     @" 
     this.Products.Map(function(product) { 
      if(product.Order == undefined) 
      { 
       product.Order = parseInt(product.CustomId.split('-')[1]); 
      } 
      return product; 
     });" 
    } 
); 

내가 그것을 구축이 페이지를 참조 :

set based ops

partial document updates (특히 Map 섹션)

관련 문제