2017-09-03 12 views
1

그래프의 'user'레이블 아래에 추가 할 사용자 이름 배열 (예 : ['abc','def','ghi'])이 있습니다.Gremlin - 존재하지 않는 정점 만 추가하십시오.

이제 사용자 이름이 이미 존재하는지 (g.V().hasLabel('user').has('username','def')) 확인한 다음 사용자 이름 속성이 '사용자'레이블과 일치하지 않는 항목 만 추가하려고합니다.

또한이 작업은 단일 gremlin 쿼리 또는 groovy 스크립트에서 수행 할 수 있습니까?

저는 titan 그래프 데이터베이스, tinkerpop3 및 gremlin REST 서버를 사용하고 있습니다.

답변

5

"스크립트"를 사용하면 원하는 작업을 처리하기 위해 서버에 여러 줄/명령 스크립트를 항상 전달할 수 있습니다. 이 질문은 다음 일반 프로그래밍 기술, 변수를 사용하여 응답하는 경우/다음 문장 등 :

t = g.V().has('person','name','bill') 
t.hasNext() ? t.next() : g.addV('person').property('name','bill').next() 

혹은 :

g.V().has('person','name','bill').tryNext().orElseGet{ 
    g.addV('person').property('name','bill').next()} 

그러나 이러한 그루비 스크립트와 궁극적으로 TinkerPop가에 스크립트와 클로저를 피하는 것이 좋습니다 있습니다 순수 순회에 대한 찬성. 하나의 순회에서 "get 또는 create"를 처리하는 일반적인 방법은 다음과 같이하는 것입니다.

gremlin> g.V().has('person','name','bill').fold(). 
......1> coalesce(unfold(), 
......2>   addV('person').property('name','bill')) 
==>v[18] 
+0

내 nodejs 서버에서 gremlin을 호출하고 있습니다. 따라서 200 명의 사용자를 추가해야한다면 위의 명령을 200 번 호출해야합니까? 그리고 몇 가지 예외 또는 오류가 발생하는 경우이를 처리하는 방법과 롤백해야합니까? 그러한 시나리오에 대한 올바른 접근법을 알려주십시오. –

+0

REST와 스크립트 사용에 전념한다면 마지막 문장을 200 명의 사용자를 처리하는 스크립트로 변환하면됩니다. 'users.each {g. (.). has (.....}') 사용자가 200 명의 사용자 목록을 가진 매개 변수인데, REST와 일괄 처리 방법을 사용하면 전체 일괄 처리가 성공하거나 모두 실패합니다. 다른 것을 원한다면 스크립트를 수정하여 루프에서 try/catch를 포함시켜 다른 방식으로 진행하십시오. 스크립트를 사용하면 기본적으로 필요한 모든 작업을 수행 할 수 있습니다. –