Neo4j 在 2 个节点中间使用 2 列值作为关系
Neo4j use 2 column values for relationship in the middle of 2 nodes
我正在 neo4j 中处理一些电子邮件数据。现在我只是一个 csv 并加载数据,创建具有 From
和 FileHash
列的节点。
From Outcome FileHash
0 sender1@sdf.com aborted sd65f4a6s5d3s456a54
1 sender2@lkj.com delivered asd35433a54d5f453a4
2 sender4@ask.com delivered as663468a635d4888d1
当前代码:
LOAD CSV WITH HEADERS FROM ("file:///sessions/parsed_message_amp.csv") AS row
WITH row WHERE NOT row.FileHash IS null //for emails that dont contain attachments
MERGE (a:Sender { name: row.From})
MERGE (b:Attachment { name: row.FileHash})
MERGE (a)-[:SENT]->(b)
这给了我 SENT
的关系。我想为关系使用结果字段,这样如果 Outcome
被中止,它会说 aborted
而不是 SENT
,如果它被交付,它会说 delivered
.我怎样才能做到这一点?
我会使用 APOC for this - you may need to install it, but if you're using Neo4j Desktop it's only a couple of clicks。您不能在 Cypher 中创建动态类型的关系,但是对于 APOC,您可以使用 apoc.merge.relationship
并且只需引入结果 属性 作为关系名称。
此处的 WITH
只是设置一些测试数据来模拟您的 LOAD CSV
调用 - 只需将其替换为您的第一行即可。
WITH [
{From: 'sender1@sdf.com', Outcome: 'aborted', FileHash: 'sd65f4a6s5d3s456a54'},
{From: 'sender2@lkj.com', Outcome: 'delivered', FileHash: 'asd35433a54d5f453a4'},
{From: 'sender4@ask.com', Outcome: 'delivered', FileHash: 'as663468a635d4888d1'}] as records
UNWIND records as row
MERGE (a: Sender { name: row.From })
MERGE (b: Attachment { name: row.FileHash })
WITH a, b, row
CALL apoc.merge.relationship(a, row.Outcome, {}, {}, b) YIELD rel
RETURN a, b
您可能希望在将 row.Outcome
用作关系名称之前将其大写,以使其更标准一些,由您决定。
我正在 neo4j 中处理一些电子邮件数据。现在我只是一个 csv 并加载数据,创建具有 From
和 FileHash
列的节点。
From Outcome FileHash
0 sender1@sdf.com aborted sd65f4a6s5d3s456a54
1 sender2@lkj.com delivered asd35433a54d5f453a4
2 sender4@ask.com delivered as663468a635d4888d1
当前代码:
LOAD CSV WITH HEADERS FROM ("file:///sessions/parsed_message_amp.csv") AS row
WITH row WHERE NOT row.FileHash IS null //for emails that dont contain attachments
MERGE (a:Sender { name: row.From})
MERGE (b:Attachment { name: row.FileHash})
MERGE (a)-[:SENT]->(b)
这给了我 SENT
的关系。我想为关系使用结果字段,这样如果 Outcome
被中止,它会说 aborted
而不是 SENT
,如果它被交付,它会说 delivered
.我怎样才能做到这一点?
我会使用 APOC for this - you may need to install it, but if you're using Neo4j Desktop it's only a couple of clicks。您不能在 Cypher 中创建动态类型的关系,但是对于 APOC,您可以使用 apoc.merge.relationship
并且只需引入结果 属性 作为关系名称。
此处的 WITH
只是设置一些测试数据来模拟您的 LOAD CSV
调用 - 只需将其替换为您的第一行即可。
WITH [
{From: 'sender1@sdf.com', Outcome: 'aborted', FileHash: 'sd65f4a6s5d3s456a54'},
{From: 'sender2@lkj.com', Outcome: 'delivered', FileHash: 'asd35433a54d5f453a4'},
{From: 'sender4@ask.com', Outcome: 'delivered', FileHash: 'as663468a635d4888d1'}] as records
UNWIND records as row
MERGE (a: Sender { name: row.From })
MERGE (b: Attachment { name: row.FileHash })
WITH a, b, row
CALL apoc.merge.relationship(a, row.Outcome, {}, {}, b) YIELD rel
RETURN a, b
您可能希望在将 row.Outcome
用作关系名称之前将其大写,以使其更标准一些,由您决定。