[英]Batch node relationship creation in cypher/neo4j
分解此 CREATE 密碼查詢的最有效方法是什么?
結束模式如下:
(newTerm:term)-[:HAS_META]->(metaNode:termMeta)
在這種模式中,這是一個 newTerm 節點和大約 25 個 termMeta 節點。 HAS_META 關系將有一個屬性(languageCode),每個 termMeta 節點都不同。
在應用程序中,將同時創建所有這些節點和關系。 我正在嘗試確定添加它們的最佳方式。
無論如何要添加這些而不必為每個 TermMeta 節點執行單獨的查詢?
我知道您可以使用以下查詢格式添加節點的多個實例:
"metaProps" : [
{"languageCode" : "en", "name" : "1", "dateAdded": "someDate1"},
{"languageCode" : "de", "name" : "2", "dateAdded": "someDate2"},
{"languageCode" : "es", "name" : "3", "dateAdded": "someDate3"},
{"languageCode" : "fr", "name" : "3", "dateAdded": "someDate4"}
]
但是您一次只能對一種類型的節點執行此操作,並且(據我所知)無法動態添加所需的關系屬性。
任何見解將不勝感激。
據我所知,沒有真正優雅的方法可以做到這一點 - 從您的示例中,我假設您正在使用參數。 您可以使用 foreach 循環遍歷參數並對每個參數進行創建,但它非常難看,並且需要您明確指定屬性的文字映射。 以下是您的示例的外觀:
CREATE (newTerm:term)
FOREACH ( props IN {metaProps} |
CREATE newTerm-[:HAS_META {languageCode: props.languageCode}]->
(:termMeta {name: props.name, dateAdded: props.dateAdded})
)
WITH newTerm
MATCH newTerm-[rel:HAS_META]->(metaNode:termMeta)
RETURN newTerm, rel, metaNode
如果不需要返回結果,可以刪除FOREACH
之后的FOREACH
。
以不同的方式選擇和命名每個頂點,然后使用它創建關系。 前任
match (n:Tag), (m:Account), (l:FOO) CREATE (n)-[r:mn]->(m),(m)-[x:ml]->(l)
match (n:Tag{a:"a"}), (m:Account{b:"x"}), (l:FOO) CREATE (n)-[r:mn]->(m),(m)-[x:ml]->(l)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.