When using LOAD CSV function with session.run() to execute cypher statements into Neo4J it does'nt return anything. Have tried removing LOAD CSV and it works perfectly fine in creating nodes.
This is the code:
import fs from "fs";
import path from "path";
const {createWriteStream} = require("fs");
const {GraphQLUpload} = require("apollo-server");
import {session} from "./index.js"
/*
* Check for GRAPHQL_SCHEMA environment variable to specify schema file
* fallback to schema.graphql if GRAPHQL_SCHEMA environment variable is not set
*/
const files = [];
export const typeDefs = fs
.readFileSync(
process.env.GRAPHQL_SCHEMA || path.join(__dirname, "schema.graphql")
)
.toString("utf-8");
export const resolvers = {
// Upload: GraphQLUpload,
Query: {
files: () => files
},
Mutation: {
uploadFile: async (_, {file}) => {
const {createReadStream, filename } = await file;
await new Promise(res =>
createReadStream()
.pipe(createWriteStream(path.join(__dirname, "./uploads", filename)))
.on("close", res)
);
session.run("LOAD CSV WITH HEADERS FROM 'file:///Connections.csv' AS csvLine CREATE(n)"); // This does not work with the LOAD CSV (Works with only CREATE(n))
return true;
}
}
};
Cypher script embedded in your code is not proper
"LOAD CSV WITH HEADERS FROM 'file:///Connections.csv' AS csvLine CREATE(n)"
In the script you are saying to load csv file name Connections.csv alias csvLine and then you are not using csvline into code and merely creating blank node .
Basically csvLine is the second row of the csv file (first row is Headers). For an example if your file contains data like below
ID,Name
123,Vivek
234,Kasper
Where Id is considered as unique and you are trying to Create Nodes with Label as Person then try below
"LOAD CSV WITH HEADERS FROM 'file:///Connections.csv' AS csvLine CREATE(p:Person{id:csvLine.ID}) Set p.name=csvLine.Name"
Thanks a lot for the response! That will be very good to know for later on.
Though the problem right now is that with this code we don't even get a blank node in Neo4j desktop.. It only creates a blank node when we remove the CSV IMPORT.
so basically "CREATE(n)" gives us an empty node, but with CSV IMPORT we get nothing.
In your example number of column headers and there row count value mismatch.
However in case you have following data set with email as unique property
First Name,Last Name,Email Address,Company,Position,Connected On Kasper,Knudsen,kasper@gmail.com,ABBA The Museum,Customer Service,12 May 2020
then you can code as
"LOAD CSV WITH HEADERS FROM 'file:///Connections.csv' AS csvLine CREATE(p:Person{emailid:csvLine.Email Address})
Set p.firstName=csvLine.First Name,
p.lastName=csvLine.Last Name,
p.company=csvLine.Company,
p.position=csvLine.Posttion,
p.connectedOn=csvLine.Connected On"
Make sure every column header /property should be prefixed and suffixed by back tick if they have space in between. Also right now date is loaded as string to store it as date you need to type cast