Как получить список отношений узла, упорядоченный по свойствам отношения? - PullRequest
0 голосов
/ 25 марта 2019

Я хочу получить список отношений узлов, упорядоченный по свойствам отношений.Например, у меня есть две метки для моих узлов, которые являются Org и Company, между ними есть только один тип отношений - INVEST_IN.Отношение INVEST_IN имеет свойство «Series», которое может быть «Series A», «Series B», «Series C», поэтому график выглядит следующим образом:

merge (o:Org{name:'Google'})
merge (o2:Org{name:'Facebook'})
merge (c:Company{name:'Company1'})
merge (c2:Company{name:'Company2'})
merge (o)-[:INVEST_IN{series:'A'}]-(c)
merge (o)-[:INVEST_IN{series:'B'}]-(c)
merge (o)-[:INVEST_IN{series:'C'}]-(c)
merge (o)-[:INVEST_IN{series:'A'}]-(c2)
merge (o)-[:INVEST_IN{series:'B'}]-(c2)
merge (o2)-[:INVEST_IN{series:'C'}]-(c)
merge (o2)-[:INVEST_IN{series:'B'}]-(c2)
merge (o2)-[:INVEST_IN{series:'C'}]-(c2)

enter image description here

Так что мне нужен результат как:

Org order_series

Google [A, B, C]
Facebook [C, B]

Результат упорядочен по количеству серий отношений каждой организации.У Google есть 2 серии A, 2 серии B, 1 серия C, поэтому в результате получается [A, B, C] Facebook имеет 1 серию B и 2 серии C, поэтому получается [C, B]

match (o:Org)-[r:INVEST_IN]->(c:Company)
return o.name, r.series, count(r.series)

верните enter image description here

и я не понимаю разницы между

match (o:Org)-[r:INVEST_IN]->(c:Company)
return o.name, r.series, count(r.series)

и

match (o:Org)-[r:INVEST_IN]->(c:Company)
with o, r, count(r.series) as cr
return o.name, r.series, cr

Они такие разные,Я не мог заказать отношения и собрать их.Может кто-нибудь показать мне, как мне это сделать?

1 Ответ

1 голос
/ 25 марта 2019

Ваши 2 запроса логически совпадают, поскольку узлы Org имеют уникальные значения name.

Этот запрос:

MATCH (o:Org)-[r:INVEST_IN]->(c:Company)
RETURN o.name AS name, r.series AS series, COUNT(r.series) AS cnt
ORDER BY name ASC, cnt DESC

дает такой результат:

╒══════════╤════════╤═════╕
│"name"    │"series"│"cnt"│
╞══════════╪════════╪═════╡
│"Facebook"│"C"     │2    │
├──────────┼────────┼─────┤
│"Facebook"│"B"     │1    │
├──────────┼────────┼─────┤
│"Google"  │"A"     │2    │
├──────────┼────────┼─────┤
│"Google"  │"B"     │2    │
├──────────┼────────┼─────┤
│"Google"  │"C"     │1    │
└──────────┴────────┴─────┘

[ОБНОВЛЕНИЕ]

Чтобы получить ряд для каждого Org в списке:

MATCH (o:Org)-[r:INVEST_IN]->(c:Company)
WITH o.name AS name, r.series AS series, COUNT(r.series) AS cnt
ORDER BY name ASC, cnt DESC
RETURN name, COLLECT(series) AS seriesList

, который дает такой результат:

╒══════════╤═════════════╕
│"name"    │"seriesList" │
╞══════════╪═════════════╡
│"Facebook"│["C","B"]    │
├──────────┼─────────────┤
│"Google"  │["A","B","C"]│
└──────────┴─────────────┘
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...