Neo4j 如何在节点之间创建随机关系?
我试图在银行账户之间创建随机交易。我创建了以下查询:Neo4j 如何在节点之间创建随机关系?,neo4j,cypher,Neo4j,Cypher,我试图在银行账户之间创建随机交易。我创建了以下查询: //Create transactions CALL apoc.periodic.iterate(" match (a:BANK_ACCOUNT) WITH apoc.coll.randomItem(collect(a)) as sender return sender", " MATCH (b:BANK_ACCOUNT) WHERE NOT sender = b WITH apoc.coll.randomIte
//Create transactions
CALL apoc.periodic.iterate("
match (a:BANK_ACCOUNT)
WITH apoc.coll.randomItem(collect(a)) as sender
return sender", "
MATCH (b:BANK_ACCOUNT)
WHERE NOT sender = b
WITH apoc.coll.randomItem(collect(b)) as receiver
MERGE (sender)-[r:HAS_TRANSFERED {time: datetime()}]->(receiver)
set r.amount = rand()*1000",
{batchSize:100, parallel:false});
我假设它会在随机银行账户之间创建100个随机交易。相反,它创建了一个新的银行账户和一个新的关系。我做错了什么?我应该怎么做
谢谢你的帮助 以下查询用于一次获取200个不同的随机帐户(这比获取一个随机帐户200次快得多):
注:
CREATE
而不是MERGE
,因为TRANSFERED\u TO
关系不太可能已经存在,当前时间为time
值。(如果仍然可以复制,您可以选择使用MERGE
)WHERE SIZE(accts)>1
测试可避免至少没有2个帐户时出现错误SIZE(accts)/2*2-1
计算会阻止函数生成超过发送方
帐户的上一个有效索引的列表索引(i
)MATCH (ba:BankAccount)
WITH apoc.coll.randomItems(COLLECT(ba), 200) AS accts
WHERE SIZE(accts) > 1
UNWIND RANGE(0, SIZE(accts)/2*2-1, 2) AS i
WITH accts[i] AS sender, accts[i+1] AS receiver
CREATE (sender)-[:TRANSFERED_TO {time: datetime()}]->(receiver)