Neo4j 在使用 apoc.merge.relationship() 时将 属性 添加到关系中
Neo4j add property to relationship when using apoc.merge.relationship()
我有以下导入:
// NO ATTACHMENT OR LINK
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM ("file:///sessions/Hourly_Parsed/2019-12-10_00_hourly_parsed_mail_logs.csv") AS row
MERGE (a:Sender { name: row.From, domain: row.Sender_Sub_Fld, datetime: datetime(replace(row.DateTime, ' ', 'T'))})
MERGE (b:Recipient { name: row.To, datetime: datetime(replace(row.DateTime, ' ', 'T'))})
WITH a,b,row
WHERE row.Url = "false" AND row.FileHash = "false"
CALL apoc.merge.relationship(a, row.Outcome2, {}, {}, b) YIELD rel as rel1
RETURN a,b
如您所见,我已将日期时间 属性 添加到 Sender
和 Recipient
节点。我想将此 属性 添加到关系中。我 运行 遇到的问题是我的 属性 是使用 apoc.merge.relationship()
创建的,因此我可以根据行列中的结果创建名称。
我可以在 CALL
部分下方添加一些内容以将 datetime: datetime(replace(row.DateTime, ' ', 'T'))
作为 属性 添加到关系中吗?
您可以在同一 apoc.merge.relationship
调用中向关系添加属性。这是该 apoc 调用的签名:
apoc.merge.relationship(startNode :: NODE?, relationshipType :: STRING?, identProps :: MAP?, props :: MAP?, endNode :: NODE?, onMatchProps = {} :: MAP?) :: (rel :: RELATIONSHIP?)
所以这应该适合你:
CALL apoc.merge.relationship(a, row.Outcome2, {}, {datetime:datetime(replace(row.DateTime, ' ', 'T'))}, b, {})
请记住,只有在创建新边时才会添加 datatime
属性。如果您在 apoc.merge.relationship
的最后一个参数中设置 属性,那么 属性 将添加到 MATCH
。如果要在 MERGE
的 MATCH
部分包含 属性,可以在 apoc.merge.relationship
的第 3 个参数中设置它。例如,如果您 运行
CALL apoc.merge.relationship(a, "CONNECTS_TO", {time: "today"}, {}, b, {})
CALL apoc.merge.relationship(a, "CONNECTS_TO", {time: "tomorrow"}, {}, b, {})
你最终会在 a
和 b
之间得到两条 CONNECTS_TO
边,一条是 time: "today"
,一条是 time:"tomorrow"
。但是,如果您 运行 以下
CALL apoc.merge.relationship(a, "CONNECTS_TO", {}, {time: "today"}, b, {})
CALL apoc.merge.relationship(a, "CONNECTS_TO", {}, {time: "tomorrow"}, b, {})
您最终将只有一个 CONNECTS_TO
边,其 time: "today"
作为其 属性。
我有以下导入:
// NO ATTACHMENT OR LINK
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM ("file:///sessions/Hourly_Parsed/2019-12-10_00_hourly_parsed_mail_logs.csv") AS row
MERGE (a:Sender { name: row.From, domain: row.Sender_Sub_Fld, datetime: datetime(replace(row.DateTime, ' ', 'T'))})
MERGE (b:Recipient { name: row.To, datetime: datetime(replace(row.DateTime, ' ', 'T'))})
WITH a,b,row
WHERE row.Url = "false" AND row.FileHash = "false"
CALL apoc.merge.relationship(a, row.Outcome2, {}, {}, b) YIELD rel as rel1
RETURN a,b
如您所见,我已将日期时间 属性 添加到 Sender
和 Recipient
节点。我想将此 属性 添加到关系中。我 运行 遇到的问题是我的 属性 是使用 apoc.merge.relationship()
创建的,因此我可以根据行列中的结果创建名称。
我可以在 CALL
部分下方添加一些内容以将 datetime: datetime(replace(row.DateTime, ' ', 'T'))
作为 属性 添加到关系中吗?
您可以在同一 apoc.merge.relationship
调用中向关系添加属性。这是该 apoc 调用的签名:
apoc.merge.relationship(startNode :: NODE?, relationshipType :: STRING?, identProps :: MAP?, props :: MAP?, endNode :: NODE?, onMatchProps = {} :: MAP?) :: (rel :: RELATIONSHIP?)
所以这应该适合你:
CALL apoc.merge.relationship(a, row.Outcome2, {}, {datetime:datetime(replace(row.DateTime, ' ', 'T'))}, b, {})
请记住,只有在创建新边时才会添加 datatime
属性。如果您在 apoc.merge.relationship
的最后一个参数中设置 属性,那么 属性 将添加到 MATCH
。如果要在 MERGE
的 MATCH
部分包含 属性,可以在 apoc.merge.relationship
的第 3 个参数中设置它。例如,如果您 运行
CALL apoc.merge.relationship(a, "CONNECTS_TO", {time: "today"}, {}, b, {})
CALL apoc.merge.relationship(a, "CONNECTS_TO", {time: "tomorrow"}, {}, b, {})
你最终会在 a
和 b
之间得到两条 CONNECTS_TO
边,一条是 time: "today"
,一条是 time:"tomorrow"
。但是,如果您 运行 以下
CALL apoc.merge.relationship(a, "CONNECTS_TO", {}, {time: "today"}, b, {})
CALL apoc.merge.relationship(a, "CONNECTS_TO", {}, {time: "tomorrow"}, b, {})
您最终将只有一个 CONNECTS_TO
边,其 time: "today"
作为其 属性。