Head's Up! These forums are read-only. All users and content have migrated. Please join us at community.neo4j.com.
05-28-2019 01:30 AM
This is sample data in csv file.(Main column has all same values and i need to create a relation between Main and ColumnA and on clicking columnA nodes the nodes connected to that should be displayed)
|ColumnA|Main|ColumnB|
|TDWM.TDWMLOCK|TDWMObjectAssnSP|TDWM.TDWMLOCK|
|TDWM.TDWMABC|TDWMObjectAssnSP|TDWM.TDWMABC|
|TDWM.RuleDefs|TDWMObjectAssnSP|TDWM.RuleDefs|
|TDWM.RuleQualifyCriteria|TDWMObjectAssnSP|TDWM.RuleQualifyCriteria|
|SQLJ.JARS|TDWMObjectAssnSP|SQLJ.JARS|
|TDWM.RuleQualifyCriteria|TDWMObjectAssnSP|TDWM.RuleQualifyCriteria|
|TDWM.RuleQualifyCriteria|TDWMObjectAssnSP|TDWM.RuleQualifyCriteria|
|SQLJ.JARS|TDWMObjectAssnSP|DBC.DBASE|
|SQLJ.JARS|TDWMObjectAssnSP|DBC.DB1|
|SQLJ.JARS|TDWMObjectAssnSP|DBC.ABC|
|DBC.ABC|TDWMObjectAssnSP|DBC.Data1|
|DBC.ABC|TDWMObjectAssnSP|DBC.Data2|
|DBC.ABC|TDWMObjectAssnSP|DBC.MNOP|
|DBC.ABC|TDWMObjectAssnSP|DBC.XYZ1|
|DBC.ABC|TDWMObjectAssnSP|DBC.XYZ2|
|DBC.ABC|TDWMObjectAssnSP|DBC.XYZ3|
|DBC.DB1|TDWMObjectAssnSP|DBC.SAP|
here i dnt want the relationships between the same values in columnA and columnB.
please let me know if you have any solutions for this.
Thanks.
05-28-2019 04:22 AM
here is a quick one
LOAD CSV WITH HEADERS FROM "file:///neo_data.csv" AS row FIELDTERMINATOR ';'
MERGE(n:Main{fullname:row.Main})
MERGE(c1:Column{name:row.ColumnA})
MERGE(c2:Column{name:row.ColumnB})
CREATE UNIQUE (n)-[:has_connection]->(c1)
CREATE UNIQUE (n)-[:has_connection]->(c2)
query
match (n:Main)-[]-(m:Column) return n.fullname,m.name order by m.name
05-28-2019 10:12 PM
Hi Dominic,
I have also done the same thing but my requirement is different.
for example in the first column we have SQLJ.JARS and also third column it has data DBC.DB1 and also DBC.DB1 is in first column which has other data so i need to create a relation as such so that when clicking on SQLJ.JARS it shows relationship with all its data and DBC.DB1 which comes in first column shows relationship when we click on it in SQLJ.JARS relation itself.
Thanks.
05-28-2019 11:54 PM
Try this:
I copied your data and created a .csv file to import.
Cypher Query:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:/manish.csv' AS row
FIELDTERMINATOR '|'
WITH row
FOREACH(ignoreMe IN CASE WHEN row.ColumnA <> row.ColumnB THEN [1] ELSE END |
MERGE(n:Main{fullname:row.Main})
MERGE(c1:Column{name:row.ColumnA})
MERGE(c2:Column{name:row.ColumnB})
MERGE (n)-[:has_connection]->(c1)
MERGE (n)-[:has_connection]->(c2)
)
;
In the FOREACH statement make sure you have two square (opening and closing) brackets after ELSE.
Added 12 labels, created 12 nodes, set 12 properties, created 11 relationships, completed after 332 ms.
Result:
05-29-2019 01:48 AM
Thanks a lot.
I got the idea , will try it if i face any issues will let you know 🙂
05-29-2019 01:07 PM
Note that you only need this FOREACH trick if you have additional operations to perform after this.
Otherwise you can simply use a WHERE clause so that you only apply the rest of the query when your condition is true:
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:/manish.csv' AS row
FIELDTERMINATOR '|'
WITH row
WHERE row.ColumnA <> row.ColumnB
MERGE(n:Main{fullname:row.Main})
MERGE(c1:Column{name:row.ColumnA})
MERGE(c2:Column{name:row.ColumnB})
MERGE (n)-[:has_connection]->(c1)
MERGE (n)-[:has_connection]->(c2)
05-29-2019 10:13 PM
and what if a value from columnA has a relationship with columnB and the value in ColumnB is present in coulumnA with relation to other value.
How to create that relation?
columnA Main columnB
A R B
F R C
C R T
so i need a graph of type:
How to do this? I am getting everything except this.
05-29-2019 11:18 PM
I'm a little confused why you would use three values/nodes to create relationships (all outgoing from the "main" node) when you want a graph like this.
Couldn't you just use two columns, representing pair of nodes that need a relationship between them? Then it's just a MATCH a MATCH b MERGE relationship between them.
columnA columnB
R A
A B
R F
C T
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:/manish.csv' AS row
FIELDTERMINATOR '|'
WITH row
WHERE row.ColumnA <> row.ColumnB
MERGE(c1:Column{name:row.ColumnA})
MERGE(c2:Column{name:row.ColumnB})
MERGE (c1)-[:has_connection]->(c2)
If I've misunderstood what you're trying to do, please clarify what it is you want.
05-29-2019 11:35 PM
I want Main to be the main node and upon clicking on main it will show all relations with ColumnA and upon clicking values of columnA it will give relation with columnB.
05-30-2019 09:35 AM
In that case, if you intend to keep your CSV in the same format, you would change your merges such that column b is connected to column a. Previous queries were connecting both to the main node.
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM 'file:/manish.csv' AS row
FIELDTERMINATOR '|'
WITH row
WHERE row.ColumnA <> row.ColumnB
MERGE(n:Main{fullname:row.Main})
MERGE(c1:Column{name:row.ColumnA})
MERGE(c2:Column{name:row.ColumnB})
MERGE (n)-[:has_connection]->(c1)
MERGE (c1)-[:has_connection]->(c2)
And if the direction of the relationship doesn't matter to you, and you just need a connection present, you can omit the direction in your MERGE.
All the sessions of the conference are now available online