Neo4j - 如何按 属性 分组和计数?
Neo4j - how to group and count by property?
我的图表中有两种节点类型。
节点 1 {id, 名称, node2id}
节点 2 {id,名称}
此时没有关系,但我只需要在 a:Node1 和 b:Node2 之间创建节点 2 小于 100 的地方。
因此,在 SQL 中,获取节点的查询类似于:
select Node1.Id, count(Node2.Id) as connections
from Node1 left join Node2
on (Node1.node2id = Node2.Id)
group by Node1.Id
having count(Node2.Id) < 100
我如何在 Neo4J 中执行此操作?
理想情况下,我想在这些节点之间添加关系,比如
CREATE (n:Node1)-[:HAS_CONNECTION]->(k:Node2)
您可以使用类似的东西:
MATCH (n1:Node1), (n2:Node2)
WHERE n1.node2id = n2Id
WITH n1, collect(n2) as nodes, count(*) AS count
WHERE count < 100
UNWIND nodes AS n
CREATE (n1)-[:HAS_CONNECTION]->(n)
您使用WITH
语句收集所有与node1具有相同id的node2,统计它们,然后对其应用过滤器。
我的图表中有两种节点类型。 节点 1 {id, 名称, node2id} 节点 2 {id,名称}
此时没有关系,但我只需要在 a:Node1 和 b:Node2 之间创建节点 2 小于 100 的地方。
因此,在 SQL 中,获取节点的查询类似于:
select Node1.Id, count(Node2.Id) as connections
from Node1 left join Node2
on (Node1.node2id = Node2.Id)
group by Node1.Id
having count(Node2.Id) < 100
我如何在 Neo4J 中执行此操作? 理想情况下,我想在这些节点之间添加关系,比如
CREATE (n:Node1)-[:HAS_CONNECTION]->(k:Node2)
您可以使用类似的东西:
MATCH (n1:Node1), (n2:Node2)
WHERE n1.node2id = n2Id
WITH n1, collect(n2) as nodes, count(*) AS count
WHERE count < 100
UNWIND nodes AS n
CREATE (n1)-[:HAS_CONNECTION]->(n)
您使用WITH
语句收集所有与node1具有相同id的node2,统计它们,然后对其应用过滤器。