CREATE

The CREATE clause is used to create nodes and relationships.

In the CREATE clause, patterns are used extensively. Read Patterns for an introduction.

Create nodes

Create single node

Creating a single node is done by issuing the following query:

Query
CREATE (n)
Table 1. Result

(empty result)

Rows: 0
Nodes created: 1

Create multiple nodes

Creating multiple nodes is done by separating them with a comma.

Query
CREATE (n), (m)
Table 2. Result

(empty result)

Rows: 0
Nodes created: 2

Create a node with a label

To add a label when creating a node, use the syntax below:

Query
CREATE (n:Person)
Table 3. Result

(empty result)

Rows: 0
Nodes created: 1
Labels added: 1

Create a node with multiple labels

To add labels when creating a node, use the syntax below. In this case, we add two labels.

Query
CREATE (n:Person:Swedish)
Table 4. Result

(empty result)

Rows: 0
Nodes created: 1
Labels added: 2

Create node and add labels and properties

When creating a new node with labels, you can add properties at the same time.

Query
CREATE (n:Person {name: 'Andy', title: 'Developer'})
Table 5. Result

(empty result)

Rows: 0
Nodes created: 1
Properties set: 2
Labels added: 1

Return created node

Creating a single node is done by issuing the following query:

Query
CREATE (a {name: 'Andy'})
RETURN a.name

The name of the newly-created node is returned.

Table 6. Result
a.name

"Andy"

Rows: 1
Nodes created: 1
Properties set: 1

Create relationships

Create a relationship between two nodes

To create a relationship between two nodes, we first get the two nodes. Once the nodes are loaded, we simply create a relationship between them.

Query
MATCH
  (a:Person),
  (b:Person)
WHERE a.name = 'A' AND b.name = 'B'
CREATE (a)-[r:RELTYPE]->(b)
RETURN type(r)

The created relationship is returned by the query.

Table 7. Result
type(r)

"RELTYPE"

Rows: 1
Relationships created: 1

Create a relationship and set properties

Setting properties on relationships is done in a similar manner to how it’s done when creating nodes. Note that the values can be any expression.

Query
MATCH
  (a:Person),
  (b:Person)
WHERE a.name = 'A' AND b.name = 'B'
CREATE (a)-[r:RELTYPE {name: a.name + '<->' + b.name}]->(b)
RETURN type(r), r.name

The type and name of the newly-created relationship is returned by the example query.

Table 8. Result
type(r) r.name

"RELTYPE"

"A<->B"

Rows: 1
Relationships created: 1
Properties set: 1

Create a full path

When you use CREATE and a pattern, all parts of the pattern that are not already in scope at this time will be created.

Query
CREATE p = (:Person {name:'Andy'})-[:WORKS_AT]->(:Company {name: 'Neo4j'})<-[:WORKS_AT]-(:Person {name: 'Michael'})
RETURN p

This query creates three nodes and two relationships in one go, assigns it to a path variable, and returns it.

Table 9. Result
p

(:Person {name: "Andy"})-[:WORKS_AT]→(:Company {name: "Neo4j"})←[:WORKS_AT]-(:Person {name: "Michael"})

Rows: 1
Nodes created: 3
Relationships created: 2
Properties set: 2

Use parameters with CREATE

Create node with a parameter for the properties

You can also create a graph entity from a map. All the key/value pairs in the map will be set as properties on the created relationship or node. In this case we add a Person label to the node as well.

Parameters
{
  "props": {
    "name": "Andy",
    "position": "Developer"
  }
}
Query
CREATE (n:Person $props)
RETURN n
Table 10. Result
n

Node[2]{name:"Andy",position:"Developer"}

Rows: 1
Nodes created: 1
Properties set: 2
Labels added: 1

Create multiple nodes with a parameter for their properties

By providing Cypher® an array of maps, it will create a node for each map.

Parameters
{
  "props": [ {
    "name": "Andy",
    "position": "Developer"
  }, {
    "name": "Michael",
    "position": "Developer"
  } ]
}
Query
UNWIND $props AS map
CREATE (n)
SET n = map
Table 11. Result

(empty result)

Rows: 0
Nodes created: 2
Properties set: 4