2016-10-23 5 views
0

아래에 매개 변수화 된 목록에서 언급 한 각 관계 유형에 대해 반복되는 사이퍼 쿼리가 있으며 각 관계 유형에는 연결 노드에 추가 할 특정 속성과 값이 있습니다. neo4j에 따르면 관계 유형을 매개 변수화할 수 없습니다. Cypher를 사용하여이 문제를 해결할 수 있습니까? 또는 apoc으로?매개 변수화 된 neo4j 사이퍼 쿼리 실행

Merge(n_device: Device{identifier: {deviceId}}) ON CREATE SET n_device.created=timestamp() 
WITH n_device 
OPTIONAL MATCH (n_device)-[r_prev:{deviceRel}{active:true}]->() 
WITH n_device, r_prev 
Merge(n_deviceOs: Device{{deviceRelProp}: {deviceRelPropVal}}) ON CREATE SET n_deviceOs :DeviceOs, n_deviceOs.created=timestamp(), n_deviceOs.newNode=true 
WITH n_device, n_deviceOs, r_prev 
Merge (n_device)-[r_cur:{deviceRel}]->(n_deviceOs) ON CREATE SET r_cur.active=true, r_cur.created=timestamp() 
WITH n_deviceOs, r_prev 
Match(n_deviceOs) where n_deviceOs.newNode=true set r_prev.active = false, r_prev.modified=timestamp() 
REMOVE n_deviceOs.newNode 

"params": { 
    "deviceId": "1234", 
    "deviceRel": ["HAS_DEVICE_OS", "HAS_DEVICE_OSINFO", "HAS_DEVICE_MODEL", "HAS_DEVICE_APPVERSION"], 
    "deviceRelProp": ["os", "osinfo", "model", "version"], 
    "deviceRelPropVal": ["android", "kitkat", "samsung", "1.64.2"] 
} 

답변

1

Neo4j는 매개 변수화 된 유형으로 관계를 만들 수 없습니다. 그러나이를 허용하는 APOC 절차가 있습니다. creating data section, apoc.create.relationship()을 참조하십시오 당신이 찾고있는 프로 시저입니다.

+0

나는 관계를 창조하는 것을 본다. 위의 쿼리를 볼 경우 node-relationship-node를 일치시키기위한 쿼리도 필요합니다. 나는 그것을 위해 apoc에 하나를 볼 수 없습니다. – Kartlee

+1

'일치 (n_device) - [r_prev {active : true}] ->() WHERE TYPE (r_prev) = {deviceRel}'(또는 두 번째 일치시 동일한 필터)는 기본 Cypher에서이를 수행 할 수 있습니다. –

+0

감사합니다. 언급 한대로 접근했습니다. 목록을 보내고 목록의 각 값에 대해 쿼리를 매개 변수화 할 수 있습니까? neo4j가 쉽게 지원하지 않으면 apoc을 수행 할 수 있습니까? – Kartlee