2015-09-17 67 views
3

之間的聯繫要播種的數據庫,我想創建一個小的一套個人節點的...寫的Cypher查詢來創建隨機節點

WITH ["Amy","Bob","Cal","Dan","Eve"] 
AS names 
FOREACH (r IN range(0, size(names)-1) | 
    CREATE (:Person {name: names[r]}) 
) 

...我想創建一個隨機連接每個人。是否可以在單個查詢中執行此操作?

我想我需要將每個新人添加到一個集合中,並使用從FLOOR(RAND()* size(names))創建的變量來工作,但官方文檔並沒有提供很多關於如何去做這個。

回答

4

好問題!

幾件事情,第一我常常喜歡UNWIND超過FOREACH,尤其是在這樣的情況下:

WITH ["Amy","Bob","Cal","Dan","Eve"] AS names 
UNWIND names AS name 
CREATE (:Person {name: name}) 

至於產生隨機的關係,邁克爾飢餓具有良好的博客文章覆蓋它:

http://jexp.de/blog/2014/03/quickly-create-a-100k-neo4j-graph-data-model-with-cypher-only/

在你的情況下,它會是這樣的:

MATCH (p1:Person), (p2:Person) 
WITH p1, p2 
WHERE rand() < 0.1 
MERGE p1-[:LIKES]->p2 

請謹慎對待,因爲第一個MATCH指定了所有其他人的完整笛卡爾產品,隨着您的Person節點的增長,這些產品可以快速增長。邁克爾把LIMIT放在他的WITH的帖子中

+0

非常感謝你爲此和Michael Hunger的文章鏈接。下面是我現在使用的單個查詢:WITH [「Amy」,「Bob」,「Cal」,「Dan」,「Eve」] AS名稱 UNWIND名稱AS名稱 CREATE p =(:Person {name :名稱}) 具p MATCH(P1:人),(P2:人) WITH P1,P2 WHERE蘭特()<0.3 和P1 <> P2 MERGE P1 - [:LIKES] - > P2 RETURN DISTINCT p1,p2'。我已經添加了'p1 <> p2',這樣鏈接總是在不同的節點之間。 –

相關問題