How to make relationship between two nodes from different json file based on matching property value?

408 Views Asked by At

I'm using neo4j 4.3.2 version. I have two json files. I want to match and create relationship from first json to second json file based on the matching property between nodes from two json files. Please have look on the json file:

First Json as follows:

{"id":"123"}

Second Json as follows:

"member": [
    {
        "Authority": "xy",
        "Number": "999",
        "Code": "Z2",
        "Date": "1986-06-12",
        "Publication": "123"
    }]

I want to match all nodes from first json which have property "id" value 123--->second json with all matching property "publication" value "123" and link them.

Below is code I have tried but , it shows "(no changes, no records)". What change i have make here in order to make it right. Hope for valuable suggestions.

Cypher query I have tried: Load First Json

CALL apoc.load.json ("file:///D:/first.json") YIELD value AS data merge(a:LabelA{A:data.id})

Load Second Json

CALL apoc.load.json ("file:///D:/second.json") YIELD value AS dataFOREACH (idn IN data.member | MERGE(b:LabelB{Number:idn.Number})ON CREATE SET b.Publication=idn.Publication)

Tried to Match and create Relationship

create index on :LabelA(id);create index on :LabelB(Publication);MATCH (a:LabelA) 
MATCH(b:LabelB)WHERE b.Publication = a.id merge (a)-[:lin]->(b)     

It shows "(no changes, no records)"

Any suggestion would be great help.

Thank you

1

There are 1 best solutions below

0
On

Usually, you should make this "match" using keys instead of values for it, so you use hash mapping or hash table, which is extremely more fast, but you may do something like:

a = {"id":"123"}


member = [
    {
        "Authority": "xy",
        "Number": "999",
        "Code": "Z2",
        "Date": "1986-06-12",
        "Publication": "123"
    }]

a["id"] in [member[0][key] for key in member[0]]

out[1]: True