Более подходящая модель данных с графической ориентацией.
Например, вы можете иметь узлы 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"}] │
└─────────────────┴───────────────────────────────────────────────────────────┘