2017-03-22 7 views
2
declareUpdate(); 

//get Docs 
myDoc = cts.doc("/heal/scripts/Test.json").toObject(); 

//add Data 
myDoc.prescribedPlayer = 
    [ 
    { 
     "default": "http://www.youtube.com/watch?vu003dhYB0mn5zh2c" 
    } 
    ] 

//persist 
xdmp.documentInsert("/heal/scripts/Test.json",myDoc,null,"scripts") 
+0

나는 위의 코드를 파이썬으로 얻길 원한다. –

+0

나는 https://github.com/marklogic/python_api에 대한 조언을 원한다. – grtjn

+0

@grtjn 그 중 하나만 시도했지만 파이썬 3 만 지원하고 있으며 파이썬 2.7에서 작업 중이다. –

답변

1

헤이 @Ankur

def PartialUpdateData(self,filename, content, context): 
    self.querystring = {"uri": "/" + self.collection + "/" + filename} 
    url = self.baseUri 
    self.header = {'Content-Type': "application/json"} 

    mydata = { 
       "patch":[{ "insert": { 
       "context": context, 
       "position": "before", 
       "content": content 
      }}]} 
    resp = requests.patch(url + "/documents", data=json.dumps(mydata), 
         headers=self.header, auth=self.auth, params=self.querystring) 
    return resp.content 

나는이 문제를 해결할 수 있기를 바랍니다, 파이썬 방법은 아래에 확인하시기 바랍니다.

+0

문자열이나 json 형식으로 전달되는 데이터를 변환하고 있습니까? –

+0

"json.dumps"를 사용하여 사전을 json으로 변환 중입니다. –

+0

ok Thanks Buddy –

2

새로운 JSON 속성을 추가하려고합니다. a PATCH command을 보내는 REST 클라이언트 API 요청을 사용하여이를 수행 할 수 있습니다. 패치에 an insert instruction을 사용하십시오.

당신은 문서의 루트 노드의 직계 자식으로 속성을 삽입 할 마지막 아이를 사용할 수 없음을 나타냅니다 Specifying Position in JSON의 메모를 참조하십시오. 그 전후에 대신 사용하십시오. 자세한 내용은 Limitations of JSON Path Expressions을 참조하십시오.

대신, 패치는 같이 보일 것입니다 : topProperty는 업데이트 할 자바 스크립트 객체의 루트 노드의 일부인 JSON의 속성입니다

{ 
    "insert": { 
    "context": "/topProperty", 
    "position": "after", 
    "content": 
     [ 
     { 
      "default": "http://www.youtube.com/watch?vu003dhYB0mn5zh2c" 
     } 
     ], 
    } 
} 

.

  • 파이썬에서

    이 방법을 사용하면 작업하는 동안 다른 프로세스에서 문서를 업데이트 할 수있는 가능성이 있습니다 그 위에. 쓰기를 수행하는 다른 사람의 잠재적 결과에 따라 optimistic locking 또는 multi-statement transaction을 사용하여 문제를 해결할 수 있습니다.