2016-10-23 81 views
0

以下給出的是密碼查詢,它針對每個關係類型重複進行,如參數化列表中所述,並且每個關係類型都具有要添加到連接節點的特定屬性和值。根據neo4j,不可能參數化關係類型。無論如何要使用密碼來解決這個問題嗎?或與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

我看到它的創造關係。如果您看到上述查詢,我​​還需要一個用於匹配節點關係節點。我沒有看到其中一個。 – Kartlee

+1

MATCH(n_device) - [r_prev {active:true}] - >()WHERE TYPE(r_prev)= {deviceRel}'(或第二個匹配的相同過濾器)可以在本地Cypher中完成。 –

+0

謝謝,我跟着你提到的方法。是否可以發送一個列表併爲列表中的每個值查詢參數化?如果neo4j不支持,是否可以做apoc? – Kartlee