Neo4j在使用apoc.merge.relationship()时向关系添加属性
我有以下要点:Neo4j在使用apoc.merge.relationship()时向关系添加属性,neo4j,cypher,neo4j-apoc,Neo4j,Cypher,Neo4j Apoc,我有以下要点: // 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: datetim
// 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
如您所见,我已将datetime属性添加到发送方
和接收方
节点。我想将此属性添加到关系中。我遇到的问题是,我的属性是使用apoc.merge.relationship()
创建的,因此我可以根据rows列中的结果创建名称
我可以在
调用
部分下面添加一些内容来添加日期时间:日期时间(replace(row.datetime,,'T'))
作为关系的属性吗?您可以在同一apoc.merge.relationship>调用中为关系添加属性。这是apoc电话的签名:
apoc.merge.relationship(startNode::NODE?、relationshipType::STRING?、IdentintProps::MAP?、props::MAP?、endNode::NODE?、onMatchProps={}::MAP?:(rel::relationship?)
所以这应该对你有用:
调用apoc.merge.relationship(a,row.Outcome2,{},{datetime:datetime(replace(row.datetime,,'T'))},b,{})
请记住,这将仅在创建新边缘时添加datatime
属性。如果在apoc.merge.relationship
的最后一个参数中设置了属性,则该属性将添加到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
之间的边的连接,一个是时间:“今天”
,另一个是时间:“明天”
。但是如果您运行以下命令
CALL apoc.merge.relationship(a, "CONNECTS_TO", {}, {time: "today"}, b, {})
CALL apoc.merge.relationship(a, "CONNECTS_TO", {}, {time: "tomorrow"}, b, {})
您将只得到一个连接到
edge的连接,它的属性为时间:“today”
。这是有效的,感谢您对@NonameCurious的解释