根据 Cypher neo4j 中的属性值总和创建新关系?

Posted

技术标签:

【中文标题】根据 Cypher neo4j 中的属性值总和创建新关系?【英文标题】:Create new relation based on sum of property values in Cypher neo4j? 【发布时间】:2020-03-06 00:59:58 【问题描述】:

我有4个人节点属于同一个团队,其中团队名称是节点中的一个属性,一个人与一个新节点社区有关系,因为分数> 100,如图所示

CREATE (Paul:Person id:'1', name:'Paul', Team:'T1', Joined:datetime('2020-03-04T23:13:49.990000000Z'), Score: 111)
CREATE (Jean:Person id:'2', name:'Jean', Team:'T1', Joined:datetime('2020-03-03T23:13:49.990000000Z'), Score: 88)
CREATE (Dan:Person id:'3', name:'Dan', Team:'T1', Joined:datetime('2020-03-02T23:13:49.990000000Z'), Score: 45)
CREATE (Mike:Person id:'4', name:'Mike', Team:'T1', Joined:datetime('2020-03-01T23:13:49.990000000Z'), Score: 36)

CREATE (Community:Teams id:'11', name:'Community', street:'2626 Wilkinson Court', address:'San Bernardino, CA 92410')

CREATE (Paul)-[:SCORE_AB100]->(Community)

RETURN *

每个人节点都有一个名为 Score 的属性,我想在最近两天加入节点 Community 的节点 Jean、Dan 之间创建一个新关系,如果 3 个节点(Paul、Jean、Dan)的分数总和大于 200。

返回这些节点

MATCH (p:PersonTeam: 'T1')
WHERE datetime(p.Joined) > datetime('2020-03-01T23:14:49.990000000Z')
MATCH (p1:PersonTeam: 'T1')-[r:SCORE_AB100]-(t:Teams)
RETURN p,r,t,p1

返回分数和总和

MATCH (p:PersonTeam: 'T1')
WHERE datetime(p.Joined) > datetime('2020-03-01T23:14:49.990000000Z')
MATCH (p1:PersonTeam: 'T1')-[r:SCORE_AB100]-(t:Teams)
RETURN collect(p.Score),sum(p.Score)

由于总和超过 200,我想在 Jean 到 Community 和 Dan 到 Community 之间创建一个新的关系 [:SCORE_AB200],并且还想在 paul 到 community 之间建立另一个关系。

我尝试在显示错误的地方使用 sum(p.Score)

【问题讨论】:

@Michael Hunger @Stefan Armbruster 【参考方案1】:

此查询创建每个SCORE_AB200 关系(使用MERGE 以避免创建重复):

MATCH (p:PersonTeam: 'T1')
WHERE p.Joined > datetime('2020-03-01T23:14:49.990000000Z')
WITH COLLECT(p) AS group, SUM(p.Score) AS total
WHERE total > 200
MATCH (community:Teams id:'11')
UNWIND group AS person
MERGE (person)-[:SCORE_AB200]->(community)

【讨论】:

嘿@cybersam 你能帮忙解决这个***.com/questions/60560218/… 吗?

以上是关于根据 Cypher neo4j 中的属性值总和创建新关系?的主要内容,如果未能解决你的问题,请参考以下文章

Neo4j怎么判断节点的属性的类型

Neo4J 在 Cypher 中创建临时变量

Cypher - 通过其连接节点的属性匹配节点?

Cypher Neo4J - 使用 MERGE 的 CASE 表达式

如何在neo4j cypher中规范化值

如何在neo4j Cypher中获取列表的子集