Создать новое отношение на основе суммы значений свойств в Cypher neo4j? - PullRequest
0 голосов
/ 06 марта 2020

У меня 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 *

enter image description here

У каждого узла человека есть свойство с именем Score. Я хочу создать новое отношение между узлами Жан, Дэн, который за последние два дня присоединился к узлу Сообщество, если сумма Баллы 3 узлов (Пол, Жан, Дан) больше 200.

Чтобы вернуть эти узлы

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

enter image description here

Чтобы вернуть счет и сумму

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

enter image description here

Поскольку сумма превышает 200, я хочу создать новое отношение [: SCORE_AB200] между Джин Сообществу и Дан Сообществу, а также установили связь с сообществом. enter image description here

Я попытался использовать сумму (p.Score) в ГДЕ ошибка показа

1 Ответ

1 голос
/ 06 марта 2020

Этот запрос создает каждое отношение SCORE_AB200 (используя MERGE , чтобы избежать создания дубликатов):

MATCH (p:Person{Team: '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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...