2012-10-30 2 views
0

저는 neo4j를 처음 사용했습니다. 나는 cypher와 REST API를 조금 썼다. 나는 특정 경로를 따라 잎 노드를 만들 수 있기를 원한다.이 노드는 어떤 종류의 이벤트라고 생각한다. 런타임 중에이 이벤트가 첨부 될 노드의 ID를 알 수 없습니다. 조회를 수행 한 다음 노드의 ID를 얻은 다음 새 노드를 작성해야합니다.Neo4j - Cypher 읽기 - 쓰기 - 리턴 쿼리

그래서 런타임 중에 나는 사이퍼를 사용하여 MATCH를 통해 이벤트를 첨부하고 MATCH가 반환 한 기존 노드와의 관계로 새 노드를 만들 수있는 노드를 얻을 수 있기를 바랬습니다. 그래서 필자는 적합하다고 생각되는 읽기 - 쓰기 - 리턴 쿼리가있는 사이퍼 컨닝 페이퍼를 발견했습니다. 그러나 문서에 언급 된 내용이 많지 않거나 나는 슈퍼 googler가 아닙니다!

누군가가이 (읽기 쓰기 반환)이 올바른/유효한 접근 방법인지 알려주실 수 있습니까?

많은 감사!

답변

2

옙. 좋은 접근 방법입니다. 이는 사이퍼에서 CREATE이 어떻게 작동하는지에 대한 좋은 점 중 하나입니다. 또한 rel/node를 동시에 생성하는 create unique을 선택적으로 사용할 수도 있습니다.

start n=node(1) 
create unique n-[:event]->(event {prop:"val"}) 
return n, event; 

또는 create unique없이 : 같은 뭔가

start n=node(1) 
create (event {prop:"val"}), n-[:event]->event 
return n, event; 
+0

덕분에 - 내가 질문에 명확 했어야 될 수있다. 위의 두 예제에서 노드 id 1에서 시작하여 노드 "1"에 ": event"관계가있는 노드를 만들 때 과 같은 것을 원합니다. 'START client = node : node_auto_index (client_name = "Client1") 일치하는 클라이언트 - [: OWNS] -> (device1) create (event {time : "1234567890"}), device1 - [: FAILURE_EVENT] -> 이벤트 장치를 반환 함, ' 가능합니까? 위의 쿼리를 직접 시도하지 않았습니다. 건배 – opensourcegeek

+0

그래도 작동하지만 device1은 클라이언트 : OWNS의 모든 장치와 일치합니다. 원하는 것은 아닙니다. –

+0

좋은 캐치 - 아니요 이미 생성 된 고유 한 장치를 얻고 싶습니다. 나는'어디서 '다음에'CREATE'를 할 것인가? INSERT/UPDATE에 대한 조회를 피하려고합니다. mongodb에 upsert의 라인을 따라 뭔가 멋질 것입니다. 그러나 나는 그것을 neo4j에서 어떻게 성취 할 것인지 잘 모르겠습니다. 많은 분들께 다시 한번 감사드립니다! – opensourcegeek

관련 문제