【问题标题】:How to merge nodes that have the same value for name property in Neo4j如何在 Neo4j 中合并具有相同 name 属性值的节点
【发布时间】:2018-02-21 06:21:09
【问题描述】:

我只是将文本语料库推送到 Neo4j 数据库中。当我执行MATCH (n) RETURN n Cypher 查询时,它返回多个具有相同名称的节点。如何将这些节点合并为一个?

nodes having same name

【问题讨论】:

  • 您的节点中只有name 属性吗?
  • 另外,同名节点可以存在2个以上吗?例如,name = Java 的 3 个节点。
  • 是的,节点只有name属性,并且存在多个同名节点
  • 两个以上同名节点?
  • 我之前的评论写错了,抱歉。我需要知道您是否可以拥有超过 2 个具有相同名称的节点。

标签: neo4j cypher graph-databases


【解决方案1】:

由于大小写字母,您的名称值具有不同的值(“Java”和“java”不同)。

我复制了您创建示例数据集的场景:

CREATE (n1:Node {name : "Java"}),
(n2:Node {name : "Java"}),
(n3:Node {name : "java"}),
(n1)-[:TYPE]->(),
(n1)-[:TYPE]->(),
(n1)-[:TYPE]->(),
(n2)-[:TYPE]->(),
(n2)-[:TYPE]->(),
(n3)-[:TYPE]->()

上面的查询会产生这个图表:

要合并所有“Java”节点,您可以使用APOC Procedure apoc.refactor.mergeNodes(nodes)。运行以下查询:

MATCH (n:Node)
// using toLower function to group nodes with the same name but 
// different cases (eg Java, java, javA)
WITH toLower(n.name) as name, collect(n) as nodes
// passing the nodes collection to mergeNodes APOC procedure
CALL apoc.refactor.mergeNodes(nodes) yield node
RETURN *

将您的图表更新为:

【讨论】:

  • 我正在使用 Neo4j 映射 API 中的状态转换。我的关系也有一个属性。关系是响应代码的计数。我想将它们合并在一起,包括属性。 (API_1)-[:CALLS {'2xx': 1}] -> (API_2) (API_1)-[:CALLS {'4xx': 1}] -> (API_2) (API_1)-[:CALLS {'2xx ': 2}] -> (API_2) (API_1)-[:CALLS {'4xx': 3}] -> (API_2) 想要的合并结果:(API_1)-[:CALLS {'2xx': 3, '4xx ': 4}] -> (API_2) 这可能吗,我不确定
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-01
  • 1970-01-01
相关资源
最近更新 更多