簡體   English   中英

Neo4j / Cypher-從匹配結果中獲取隨機節點

[英]Neo4j/Cypher - Get random node from matched result

我需要播種Neo4j數據庫。 假設添加了Person節點后,我需要它們編寫Book 這是我到目前為止的內容:

MATCH (p:Person)
WITH ["Book 1", "Book 2", "Book 3", "Book 4", "Book 5"] AS titles
UNWIND titles AS title
CREATE (???)-[:CREATED]->(:Content { title: title, content: "Words..." })

我以為我可以填寫??? 與來自p的隨機人MATCH ,這是第一行的MATCH 我怎樣才能做到這一點?

使用APOC程序,您可以使用函數從列表中選擇隨機項。 這是用法示例:

MATCH (p:Person)
WITH collect(p) as people
UNWIND ["Book 1", "Book 2", "Book 3", "Book 4", "Book 5"] AS title
WITH apoc.coll.randomItem(people) as person, title
CREATE (person)-[:CREATED]->(:Content { title: title, content: "Words..." })

如果您只想說5個不同的Person節點,而不必關心它們是否是隨機分布的,或者重復運行很可能獲得相同的節點,則可以使用此高效查詢(因為它不需要獲取所有Person節點):

MATCH (p:Person)
WITH p LIMIT 5
WITH COLLECT(p) AS ps, ["Book 1", "Book 2", "Book 3", "Book 4", "Book 5"] AS titles
UNWIND [i IN RANGE(0, SIZE(ps)-1) | {p: ps[i], title: titles[i]}] AS data
WITH data.p AS p, data.title AS title
MERGE (p)-[:CREATED]->(:Content {title: title, content: "Words..."})

請注意,如果要重新運行此查詢,我將使用MERGE而不是CREATE來避免產生重復的關系和節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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