Book Image

Learning Neo4j 3.x - Second Edition

By : Jerome Baton, Van Bruggen
Book Image

Learning Neo4j 3.x - Second Edition

By: Jerome Baton, Van Bruggen

Overview of this book

Neo4j is a graph database that allows traversing huge amounts of data with ease. This book aims at quickly getting you started with the popular graph database Neo4j. Starting with a brief introduction to graph theory, this book will show you the advantages of using graph databases along with data modeling techniques for graph databases. You'll gain practical hands-on experience with commonly used and lesser known features for updating graph store with Neo4j's Cypher query language. Furthermore, you'll also learn to create awesome procedures using APOC and extend Neo4j's functionality, enabling integration, algorithmic analysis, and other advanced spatial operation capabilities on data. Through the course of the book you will come across implementation examples on the latest updates in Neo4j, such as in-graph indexes, scaling, performance improvements, visualization, data refactoring techniques, security enhancements, and much more. By the end of the book, you'll have gained the skills to design and implement modern spatial applications, from graphing data to unraveling business capabilities with the help of real-world use cases.
Table of Contents (17 chapters)

Custom aggregators


Some of the most common aggregators in the SQL world are count, sum, min, or max. They are used in conjunction with the GROUP BY instruction. Here is an example of aggregator usage in Cypher:

MATCH (p:Person)-[IS_NAMED]-(ln:LastName)
RETURN ln.lastName, count(p)

Since version 3.2, Neo4j allows you to create your own aggregators, which is fairly simple. To illustrate, we will see how to code a random count: a count aggregator that returns a random value. The Java code is as follows:

package learningneo4j;

import org.neo4j.procedure.*;

public class RandomCount {
@UserAggregationFunction("learningneo4j.randomCount")
    @Description( "learningneo4j.randomCount - mostly returns a wrong value " )
    public RandomAggregator randomAggregator() {
        return new RandomAggregator();
    }

    public static class RandomAggregator {
        private long count;

@UserAggregationUpdate
        public void repeated(@Name("string") Object obj ){ // parameter 
          given as example...