[英]Relationship Creation for other properties skipped if property is Null in Cypher query
我有一個用於批量創建節點的密碼查詢。
詢問
UNWIND {batch} as row MERGE(m:TempEncounter {encounterId: row.encounterId}) ON CREATE SET m+=row
WITH m,row MATCH (u:Users {userId: row.creator }) MERGE (m)-[:USERS]->(u)
WITH m,row MATCH (l:Location {locationId: row.locationId }) MERGE (m)-[:LOCATION]->(l)
WITH m,row MATCH (p:Patient {patientId: row.patientId }) MERGE (m)-[:PATIENT]->(p)
WITH m,row MATCH (e:EncounterType {encounterTypeId: row.encounterType }) MERGE (m)-[:ENCOUNTERTYPE]->(e)
WITH m,row MATCH (u2:Users {userId: row.voidedBy }) MERGE (m)-[:USERS]->(u2)
return m;
上面的密碼查詢的問題是,假設row1的locationId為NULL(但其他行可能不這樣),那么將不會創建從LOCATION到USERS的關系。 盡管可能會出現其他屬性,例如(voidedBy,enounterType)
如何改進我的密碼查詢,以便在不存在於行中的情況下跳過建立特定關系,而在行中存在其他關系。
我正在使用此查詢來增加我的neo4j中的節點。 這里需要性能
我不知道此查詢是否會更高效,但是執行所需操作的方法如下:
UNWIND {batch} as row
MERGE(m:TempEncounter {encounterId: row.encounterId})
ON CREATE SET m+=row
WITH m,row
OPTIONAL MATCH (u:Users {userId: row.creator })
FOREACH( node IN filter(x IN [u] WHERE x IS NOT NULL) |
MERGE (m)-[:USERS]->(node)
)
WITH m, row
OPTIONAL MATCH (l:Location {locationId: row.locationId })
FOREACH( node IN filter(x IN [l] WHERE x IS NOT NULL) |
MERGE (m)-[:LOCATION]->(node)
)
...
如果此查詢的性能不足,則應嘗試將此查詢分為多個部分(每個關系一個),並通過手動管理事務的提交來對代碼進行批處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.