基本上,我有一组与发件人和收件人的交易:
Transaction 1 - Sender Joe - Receiver Bob
Transaction 2 - Sender Bob - Receiver Sam
Transaction 3 - Sender Bob - Receiver Nick
我的目标是获取每个唯一的发件人和收件人,并创建一个唯一的人员节点,其中包含其他属性,例如last_online
和email
,最终是关系链(Person) -> sends -> (Transaction) -> to -> (Person)
。我已经定义了这些用户的一小部分,我想将未知用户和已知用户合并到同一组中。
我尝试过使用merge
和create_unique
,最后我为每一个Person-Transaction关系创建了重复的节点,我现在明白了为什么(As explained here)。但是,我仍然无法弄清楚如何完成我想要完成的任务。
编辑:以下是我正在运行的查询:
MATCH (t:Transaction) MERGE (p:Person{name:t.sender}) - [:sends] -> (t)
MATCH (t:Transaction) MERGE (t) - [:to] -> (p:Person{name:t.sender})
每个查询都会为每个n
个交易创建n
个钱包。
答案 0 :(得分:1)
您必须仔细指定MERGE
使用的模式。如果MERGE
在整个模式上找不到完全匹配,则会创建整个模式(甚至是已存在的模式部分)。< / p>
以下内容应该有效(假设t
还包含事务id
和额外的交易数据foo
):
MERGE (s:Person {name: t.sender})
MERGE (r:Person {name: t.receiver})
MERGE (trans:Transaction {id: t.id})
SET trans.foo = t.foo
MERGE (s)-[:sends]->(trans)
MERGE (trans)-[:to]->(r);
要加快处理速度,您应首先:Person(name)
和:Transaction(id)
上create indexes。