Migrating to [GoLang + Neo4J] from [NodeJS + MongoBD + ElasticSearch] to build better consumer products using GraphQL

Exploring various use cases for Neo4J at work. MongoDB is turning into a bottle neck when it comes to modeling. Having superficial references to documents in other collections is a nightmare. It goes against the laws of non-relational databases. However since mongo offers it, we used it. And now it is a huge challenge to manage these relationships. My goal is to showcase that with Neo4J, you can model your data with ZERO restrictions. You can model your data using time trees or have a dynamic linked list model. To date, I am seeing ridiculous query times (scary fast), with less powerful instances. I have also been able to execute queries with Neo4J that were practically impossible with Mongo. To execute those queries with Mongo, the data would first have to be exported to a a SQS table like PostGres or Redshift. Then you would have to write ginormous and painful SQS queries. With Neo4J it's literally a few lines of cypher.

Combining GoLang with Neo4J has been incredible. Being able to assert strict schemas using Go structs and then using Neo4J's official Go orm has been really fun to work with. Setting up a Go GraphQL serverless endpoint with 15 models took no more than an hour.

I am close to fully migrating our stack from Node, Express, MongoDB, ElasticSearch on elasticbeanstalk docker multi container microservices to literally a fully serverless infrastructure, written in Go and using Neo4J. It has eliminated the need for pricey ElasticSearch instances and huge MongoDB clusters. Our data scientist loves Neo4J too.

In conclusion, Neo4J has been a pleasure to work with. For a long time we were worried about our Mongo cluster. Building consumer products with simple recommendations was a lot more work than it needed to be. With Neo4J we are free to using built in graph algos and export to Spark easily. It's like a dream. Save a lot of money on resources and get a nice UI to query and explore your graph.