Результат Neo4j Group на основе собственности - PullRequest
0 голосов
/ 05 мая 2020

У меня есть некоторые данные, которые выглядят так:

{Name: Peter
Gender: Male
Like: movie, game}
{Name:Ame
Gender: Female
Like:dog, movie, hiking}
{Name: Greg
Gender: Male
Like: hiking}

Я хочу сгруппировать их по тому, что им нравится, и создать таблицу, например:

Like: movie //Peter, Ame
count: 2

like: game //Peter
count: 1

like: dog //Ame
count: 1

like: hiking //Ame, Greg
count: 2

Как я могу запросить, чтобы получить этот результат? Или мне нужно переделать схему? Что-то вроде

MATCH (person:Person) RETURN DISTINCT person.like AS Like, count(person.like) AS Count 

Это дает мне

Like: movie, game
Count: 1

Like: dog, movie, hiking
Count: 1

Like: hiking
Count: 1

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Предполагая, что свойство Like является массивом, вы можете сделать следующее

MATCH(person:Person)
UNWIND person.like as like
RETURN like, count(*)
1 голос
/ 05 мая 2020

Более подходящая модель данных с графической ориентацией.

Например, вы можете иметь узлы Person и Interest, связанные отношениями LIKES:

MERGE (peter:Person {name: 'Peter', gender: 'M'})
MERGE (ame:Person {name: 'Ame', gender: 'F'})
MERGE (greg:Person {name: 'Greg', gender: 'M'})

MERGE (movies:Interest {name: 'Movies'})
MERGE (games:Interest {name: 'Games'})
MERGE (hiking:Interest {name: 'Hiking'})
MERGE (dogs:Interest {name: 'Dogs'})

MERGE (peter)-[:LIKES]->(movies)
MERGE (peter)-[:LIKES]->(games)
MERGE (ame)-[:LIKES]->(dogs)
MERGE (ame)-[:LIKES]->(movies)
MERGE (ame)-[:LIKES]->(hiking)
MERGE (greg)-[:LIKES]->(hiking);

Имея приведенные выше данные, вы можете легко группировать людей по их интересам. Пара примеров:

MATCH (interest:Interest)
RETURN interest, [(p)-[:LIKES]->(interest) | p] AS people;

или

MATCH (interest:Interest)<-[:LIKES]-(p)
RETURN interest, COLLECT(p) AS people;

Результат будет:

╒═════════════════╤═══════════════════════════════════════════════════════════╕
│"interest"       │"people"                                                   │
╞═════════════════╪═══════════════════════════════════════════════════════════╡
│{"name":"Movies"}│[{"gender":"M","name":"Peter"},{"gender":"F","name":"Ame"}]│
├─────────────────┼───────────────────────────────────────────────────────────┤
│{"name":"Games"} │[{"gender":"M","name":"Peter"}]                            │
├─────────────────┼───────────────────────────────────────────────────────────┤
│{"name":"Hiking"}│[{"gender":"F","name":"Ame"},{"gender":"M","name":"Greg"}] │
├─────────────────┼───────────────────────────────────────────────────────────┤
│{"name":"Dogs"}  │[{"gender":"F","name":"Ame"}]                              │
└─────────────────┴───────────────────────────────────────────────────────────┘
...