Random 编写密码查询以在随机节点之间创建链接
为了给数据库添加种子,我想创建一小组Person节点Random 编写密码查询以在随机节点之间创建链接,random,neo4j,cypher,Random,Neo4j,Cypher,为了给数据库添加种子,我想创建一小组Person节点 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)),但官方文档并没有给出
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)),但官方文档并没有给出很多关于如何做到这一点的线索。问得好
有几件事,首先我通常更喜欢放松
而不是FOREACH
,尤其是在这样的情况下:
WITH ["Amy","Bob","Cal","Dan","Eve"] AS names
UNWIND names AS name
CREATE (:Person {name: name})
至于创建随机关系,Michael Hunger有一篇很好的博客文章对此进行了介绍:
在您的情况下,它将类似于:
MATCH (p1:Person), (p2:Person)
WITH p1, p2
WHERE rand() < 0.1
MERGE p1-[:LIKES]->p2
匹配(p1:个人),(p2:个人)
用p1,p2
其中rand()小于0.1
合并p1-[:LIKES]>p2
只需注意这一点,因为第一个
匹配
指定了所有人与所有其他人的完全笛卡尔积,随着人
节点的增长,该积可以快速增长。Michael在帖子中用对自己的设置了一个限制
,非常感谢您的支持,以及Michael Hunger文章的链接。下面是我现在使用的一个查询:以[“艾米”、“鲍勃”、“卡尔”、“丹”、“伊芙”]为名称展开名称作为名称创建p=(:Person{name:name})与p匹配(p1:Person),(p2:Person)与p1,p2其中rand()<0.3和p1合并p1-[:LIKES]>p2返回不同的p1,p2
。我添加了p1p2
,这样链接总是在不同的节点之间。