Neo4J-如何基于拆分现有关系属性并自动创建链接来创建新节点?

Neo4J-如何基于拆分现有关系属性并自动创建链接来创建新节点?,neo4j,cypher,visualization,Neo4j,Cypher,Visualization,我有一个节点网络,代表通过关系(电子邮件)连接的人 电子邮件的收件人是m.slug 基于:()-[r]-(m) 我希望分割该属性(在本例中为“发件人”/m.slug ieLarry@google.com)并创建一个新节点“Google.com”作为Company(也就是说,我现在有一组根据现有信息创建的Company节点) 然后我想将谷歌(该公司)链接到我的个人节点(Larry@Google.com) -- 在不创建多个重复的公司节点的情况下,您将如何实现这一点?(即Sergey@Google.

我有一个节点网络,代表通过关系(电子邮件)连接的

电子邮件的收件人是m.slug

基于:()-[r]-(m)

我希望分割该属性(在本例中为“发件人”/m.slug ieLarry@google.com)并创建一个新节点“Google.com”作为Company(也就是说,我现在有一组根据现有信息创建的Company节点)

然后我想将谷歌(该公司)链接到我的个人节点(Larry@Google.com)

--

在不创建多个重复的公司节点的情况下,您将如何实现这一点?(即Sergey@Google.com & Larry@Google.com应连接到同一Google.com公司节点)


这是您如何确保每个电子邮件地址域名都有一个唯一的
公司
节点,并将其与每个
关联(通过
AT
关系)。为了确保唯一性,在存储域名之前,域名的大小写要低一些,因为电子邮件地址通常有不同的大小写

MATCH (n:Person)
MERGE (c:Company {name: TOLOWER(SPLIT(n.slug, '@')[1])})
CREATE (n)-[:AT]->(c);

注意:上面的查询只能执行一次,因为
CREATE
子句每次都会创建关系,即使它已经存在。如果需要多次运行查询,可以将
CREATE
替换为
MERGE

谢谢Sam-我尝试运行上面的代码,收到“Neo.ClientError.Statement.SemanticError无法使用null属性值合并节点”的消息-我尝试将查询名称更改为CompanyName
MATCH(n:Person)合并(c:Company{Companyname:TOLOWER(SPLIT(n.slug,'@')[1]))创建(n)-[:AT]>(c)
但是,我收到了相同的响应,现在创建了两个无法使用的关系属性(名称和公司名称)——在此过程中没有创建新节点(即没有公司节点)。有什么想法吗?似乎不是所有的
slug
值都有
@
字符。在进行上述查询之前,您应该清理数据,以确保所有
slug
值都是有效的电子邮件地址。