Skip to content

Instantly share code, notes, and snippets.

View adam-cowley's full-sized avatar

Adam Cowley adam-cowley

View GitHub Profile
@adam-cowley
adam-cowley / percentage-change.cypher
Created April 20, 2023 12:29
Next-level Cypher aggregations using WITH, COLLECT and UNWIND!
MATCH (u:User)-[:HAS_ENROLMENT]->(e:CompletedEnrolment)
WHERE e.completedAt >= datetime('2021-01-01')
WITH
e.completedAt.year +'-'+ e.completedAt.quarter AS quarter,
count(*) AS count
WITH collect({quarter: quarter, count: count}) AS all
UNWIND range(0, size(all)-1) AS idx
@adam-cowley
adam-cowley / toy.cypher
Created March 9, 2023 16:26
Cypher Indexes and Constraints - Using Indexes in Neo4j - Creating Single Property Indexes
PROFILE MATCH (m:Movie)
WHERE m.title STARTS WITH "Toy"
RETURN m.title
@adam-cowley
adam-cowley / episodes.cypher
Last active February 3, 2022 13:32
Learn with Jason as a Graph
// Create a graph of episodes and guests
CALL apoc.load.json('https://www.learnwithjason.dev/api/episodes')
YIELD value
//
MERGE (e:Episode {
id: value._id
})
ON CREATE SET
e.createdAt = datetime(),
@adam-cowley
adam-cowley / all.cypher
Last active June 11, 2021 10:15
Euro 2020 in Neo4j
:begin
CREATE INDEX ON :Fixture(kickoff);
CREATE CONSTRAINT ON (node:Country) ASSERT (node.id) IS UNIQUE;
CREATE CONSTRAINT ON (node:Fixture) ASSERT (node.id) IS UNIQUE;
CREATE CONSTRAINT ON (node:Group) ASSERT (node.id) IS UNIQUE;
CREATE CONSTRAINT ON (node:Player) ASSERT (node.id) IS UNIQUE;
CREATE CONSTRAINT ON (node:Stadium) ASSERT (node.name) IS UNIQUE;
CREATE CONSTRAINT ON (node:`UNIQUE IMPORT LABEL`) ASSERT (node.`UNIQUE IMPORT ID`) IS UNIQUE;
:commit
CALL db.awaitIndexes(300);
{ status: 'success', message: 'Book updated' }
{
ISBN: 1,
publication: '2020-03-13',
createdAt: '2020-03-13T17:30:20.191000000Z'
}
@adam-cowley
adam-cowley / test.grass
Created January 30, 2020 21:03
Custom icons in Neo4j Browser
node {
diameter: 50px;
color: #A5ABB6;
border-color: #9AA1AC;
border-width: 2px;
text-color-internal: #FFFFFF;
font-size: 10px;
}
relationship {
color: #A5ABB6;
@adam-cowley
adam-cowley / createCypher.js
Created June 4, 2018 17:34
Using Neo4j Temporal data types in Neo4j Drivers
const neo4j = require('neo4j-driver').v1
const driver = neo4j.driver('bolt://localhost:7687', neo4j.auth.basic('neo4j', 'neo'))
const session = driver.session()
session.run(
'CREATE (e:Event { id: $id, title: $title, startsAt: datetime($startsAt) }) RETURN e',
{
id: 2,
title: 'Another Test Event',
@adam-cowley
adam-cowley / index.js
Created March 2, 2018 16:24
Neo4j Driver as an Express Middleware
// Create an express app
const express = require('express');
const app = express();
// Tell it to use Neo4j middleware
app.use(require('./neo4j'));
// Example Route
app.get('/', (req, res) => {
// Create Driver session
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>ANSIBlackColor</key>
<data>
YnBsaXN0MDDUAQIDBAUGFRZYJHZlcnNpb25YJG9iamVjdHNZJGFyY2hpdmVyVCR0b3AS
AAGGoKMHCA9VJG51bGzTCQoLDA0OVU5TUkdCXE5TQ29sb3JTcGFjZVYkY2xhc3NPECUw
LjQ4OTQ2NTYxNjMgMC41NDM3OTkwNSAwLjU2MjMyMzI0NjYAEAKAAtIQERITWiRjbGFz
c25hbWVYJGNsYXNzZXNXTlNDb2xvcqISFFhOU09iamVjdF8QD05TS2V5ZWRBcmNoaXZl
@adam-cowley
adam-cowley / neo4j-ticketmaster
Created February 17, 2017 16:27
Import Ticketmaster Classifications into Neo4j
CALL apoc.load.json('https://app.ticketmaster.com/discovery/v2/classifications?locale=en-us&apikey={key}') YIELD value AS json
UNWIND json._embedded.classifications as classification
MERGE (seg:Segment {ticketmaster_id: classification.segment.id, name: classification.segment.name})
WITH seg, classification
UNWIND classification.segment._embedded.genres as genre
MERGE (gen:Genre {ticketmaster_id: genre.id, name: genre.name})
MERGE (seg)-[:HAS_GENRE]->(gen)
WITH seg, gen, genre
UNWIND genre._embedded.subgenres as subgenre
MERGE (sub:SubGenre {ticketmaster_id: subgenre.id, name: subgenre.name})