Skip to content

Instantly share code, notes, and snippets.

@gaving
Last active December 13, 2022 14:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gaving/cb00a5adf99541c877c532868aac1a91 to your computer and use it in GitHub Desktop.
Save gaving/cb00a5adf99541c877c532868aac1a91 to your computer and use it in GitHub Desktop.
// Delete all nominals
MATCH (n:Nominal) DETACH DELETE n;
// Delete all incidents
MATCH (i:Incident) DETACH DELETE i;
// Convert data from JSON
WITH apoc.convert.fromJsonMap('{
"cluster_id": 5,
"source": "vpd",
"relationships": {
"parents": [1,2],
"children": [6,7]
},
"vpd_data": {
"types": [
{"incident_id": 1000},
{"incident_id": 1001},
{"incident_id": 1002}
]
}
}') AS data
// Create focus nominal
MERGE (nominal:Nominal {id:data.cluster_id}) ON CREATE SET nominal.source = data.source
// Create relationships
FOREACH (relationship IN data.relationships |
// Create all parents
FOREACH (parentId IN relationship.parents |
MERGE (parent:Nominal {id:parentId}) ON CREATE SET parent.source = data.source
MERGE (nominal)<-[:IS_PARENT_OF]-(parent)
)
// Create all children
FOREACH (childId IN relationship.children |
MERGE (child:Nominal {id:childId}) ON CREATE SET child.source = data.source
MERGE (nominal)-[:IS_PARENT_OF]->(child)
)
)
// Create incidents
FOREACH (type IN data.vpd_data.types |
MERGE (i:Incident {id:type.incident_id}) ON CREATE SET i.source = data.source
MERGE (nominal)-[:IS_LINKED_TO]->(i)
);
// Convert data from JSON
WITH apoc.convert.fromJsonMap('{
"cluster_id": 10,
"source": "vpd",
"relationships": {
"parents": [6, 19],
"children": [100]
},
"vpd_data": {
"types": [
{"incident_id": 1000},
{"incident_id": 1001},
{"incident_id": 1002}
]
}
}') AS data
// Create focus nominal
MERGE (nominal:Nominal {id:data.cluster_id}) ON CREATE SET nominal.source = data.source
// Create relationships
FOREACH (relationship IN data.relationships |
// Create all parents
FOREACH (parentId IN relationship.parents |
MERGE (parent:Nominal {id:parentId}) ON CREATE SET parent.source = data.source
MERGE (nominal)<-[:IS_PARENT_OF]-(parent)
)
// Create all children
FOREACH (childId IN relationship.children |
MERGE (child:Nominal {id:childId}) ON CREATE SET child.source = data.source
MERGE (nominal)-[:IS_PARENT_OF]->(child)
)
)
// Create incidents
FOREACH (type IN data.vpd_data.types |
MERGE (i:Incident {id:type.incident_id}) ON CREATE SET i.source = data.source
MERGE (nominal)-[:IS_LINKED_TO]->(i)
);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment