Created
February 15, 2019 20:32
-
-
Save jasocox/17ea27bb6e056cc6e8fa6ba6889aa004 to your computer and use it in GitHub Desktop.
Convert downloaded example data into JSON and then upload to Neo4j
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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