如何解决如何在节点之间创建随机关系?
我正在尝试在银行帐户之间创建随机交易。我创建了以下查询:
//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次随机交易。而是创建1个新的银行帐户和1个新的关系。我在做什么错,应该怎么办?
感谢您的帮助!
解决方法
以下查询使用apoc.coll.randomItems一次获得200个不同的随机帐户(比获得200次随机一个帐户快得多):
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)
注意:
- 此查询使用
CREATE
而不是MERGE
,因为与TRANSFERED_TO
值的当前时间之间不存在time
关系。 (如果仍然可以进行复制,则可以选择使用MERGE
。) - 如果
WHERE SIZE(accts) > 1
测试中至少有两个帐户,则可以避免错误。 -
SIZE(accts)/2*2-1
计算会阻止RANGE函数生成列表索引(i
),该列表索引超过sender
帐户的最后一个有效索引。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。