从现有节点创建唯一节点' Neo4j的房产

时间:2018-02-12 05:31:44

标签: neo4j

基本上,我有一组与发件人和收件人的交易:

Transaction 1 - Sender Joe - Receiver Bob
Transaction 2 - Sender Bob - Receiver Sam
Transaction 3 - Sender Bob - Receiver Nick

我的目标是获取每个唯一的发件人和收件人,并创建一个唯一的人员节点,其中包含其他属性,例如last_onlineemail,最终是关系链(Person) -> sends -> (Transaction) -> to -> (Person)。我已经定义了这些用户的一小部分,我想将未知用户和已知用户合并到同一组中。

我尝试过使用mergecreate_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个钱包。

1 个答案:

答案 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