根据 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 中的属性值总和创建新关系?的主要内容,如果未能解决你的问题,请参考以下文章