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