Skip to content

Instantly share code, notes, and snippets.

@jasocox
Created February 15, 2019 20:32
Show Gist options
  • Save jasocox/17ea27bb6e056cc6e8fa6ba6889aa004 to your computer and use it in GitHub Desktop.
Save jasocox/17ea27bb6e056cc6e8fa6ba6889aa004 to your computer and use it in GitHub Desktop.
Convert downloaded example data into JSON and then upload to Neo4j
#!/usr/bin/env node
const http = require('http');
var neo4j = require('neo4j-driver').v1;
var prettyjson = require('prettyjson');
var driver = neo4j.driver('bolt://54.162.113.152', neo4j.auth.basic('neo4j', 'password'));
var session = driver.session();
function processUserData(data) {
dataItem = data.shift();
// Get out User object data
var user = {
user_id: dataItem.id,
name: dataItem.name,
email: dataItem.email,
phone: dataItem.phone,
website: dataItem.website
};
console.log("User:", user.user_id);
// Get out Address object data
var address = {
user_id: dataItem.id,
street: dataItem.address.street,
suite: dataItem.address.suite,
city: dataItem.address.city,
zipcode: dataItem.address.zipcode
};
console.log();
uploadUserData(user, address).then(() => {
if (data.length) {
processUserData(data);
}
});
}
function uploadUserData(user, address) {
console.log(prettyjson.render(user));
var createUser = generateCypherCreate("User", user);
console.log(prettyjson.render(address));
var createAddress = generateCypherCreate("Address", address);
var createEdge = "MATCH (u:User),(a:Address)\n";
createEdge += "WHERE u.user_id = a.user_id AND u.user_id = " + user.user_id + "\n";
createEdge += "CREATE (u)-[l:LINK]->(a)\n";
createEdge += "RETURN u, a, l";
console.log(" EDGE:", createEdge);
return session.run(createUser)
.then(() => {
return session.run(createAddress);
}).then(() => {
return session.run(createEdge);
}).catch((error) => {
console.log(error);
});
}
function generateCypherCreate(dataLabel, dataObject) {
console.log("Data Label:", dataLabel);
var keys = Object.keys(dataObject);
console.log("Keys:", keys);
var create = "CREATE (n:" + dataLabel + " {";
create += keys.map( key => key + ": \"" + dataObject[key] + "\"").join(", ");
create += "}) RETURN n";
console.log(" Cypher:", create);
return create;
}
/*
function execDelete() {
return session.run("MATCH (n) WITH n LIMIT 2 DELETE n");
}
function deleteAll() {
return session.run("MATCH (n) RETURN n LIMIT 2").then(results => {
if (results.records.length) {
var deleting = execDelete().then(() => deleteAll())
return deleting;
} else {
return null;
}
});
}
*/
function start() {
session.run("MATCH (n) DELETE n").then(() => {
http.get('http://jsonplaceholder.typicode.com/users', (resp) => {
let data = '';
resp.on('data', (chunk) => {
data += chunk
});
resp.on('end', () => {
processUserData(JSON.parse(data));
});
}).on("error",(err) => {
console.log("Error: "+err.message);
})
});
}
start();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment