Data Structures in Neo4j
Written on November 21, 2018
[
databases
neo4j
easi
]
What’s cool about Neo4j is that you can output the data almost any way you want: you can return nodes (which are basically shallow JSON documents), or anything from flat tables to full-on JSON document structures.
For example, take the movie data set. Using projection and aggregation, you can return “actor documents”, which have an actor at the top level of heirarchy, and a movies key, which stores all movie info and what roles they played.
MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)
RETURN p { .*, movies: COLLECT(m { .*, roles: r.roles})}
Better, since this is a graph database, you can effortlessly invert the relationship and return “movie documents” that list all actors and their roles in that movie.
MATCH (p:Person)-[r:ACTED_IN]->(m:Movie)
RETURN m { .*, actors: COLLECT(p { .*, roles: r.roles})}
The query is almost no different, except in how you aggregate and format the output.
Very cool!