簡體   English   中英

在 cypher/neo4j 中批量創建節點關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM