October 01, 2019

#Neo4j Part 3:Interview Questions & Answers (Merge)

What is the purpose of merge command in Neo4j?
Its a combination of CREATE command and MATCH command. It searches for a given pattern in the graph. If it exists, then it returns the results else it creates a new node/relationship and returns the results.


MERGE (node: label {properties . . . . . . . }) 

Lets create two nodes in the database with labels Employee and Ind. Create a relationship of type 'LIVES_IN'
CREATE(Employee:Developer{name:"himanshu shukla",id:1});
CREATE (Ind:Country {name: "India"});
MATCH (a:Developer), (b:Country) WHERE a.name = "himanshu shukla" AND b.name = "India" 
CREATE (a)-[r: LIVES_IN {Staying_Since:1990,Region:"North"}]->(b) 
RETURN a,b;

Merging a Node with a Label: We can merge a node in the database based on the label using the MERGE clause. If we try to merge a node based on the label, then Neo4j verifies whether there exists any node with the given label. If not, the current node will be created.

MERGE (node:label) RETURN node

e.g: MERGE (Andrew:Developer) RETURN Andrew 

Merging a Node with Properties: We can also merge a node with a set of properties. If we do so, Neo4j searches for an equal match for the specified node, including the properties. If it doesn’t find any, it creates one.

MERGE (node:label {key1:value, key2:value, key3:value . . . . . . . . }) 

e.g: Below query will return the existing node
MERGE (Employee:Developer{name:"himanshu shukla",id:1}) RETURN Employee

If you execute below query, it will create a new Employee with name 'andy shukla' and return it
MERGE (Employee:Developer{name:"andy shukla",id:1}) RETURN Employee

OnCreate and OnMatch : A node is either matched or created when we execute Merge query. With on create and on match, we can set properties for indicating whether the node is created or matched.

MERGE (node:label {properties . . . . . . . . . . .}) 
ON CREATE SET property.isCreated ="true" 
ON MATCH SET property.isFound ="true"

e.g: Since the employee with himanshu shukla is already present, thats why isFound will be set as true.
MERGE (Employee:Developer{name:"himanshu shukla",id:1}) 
ON CREATE SET Employee.isCreated = "true" 
ON MATCH SET Employee.isFound = "true" 
RETURN Employee

Merge a Relationship: Like nodes we can also merge the relationships using the MERGE clause

-K Himaanshu Shuklaa..

No comments:

Post a Comment