CREATE

CREATE子句用于创建图的顶点和边。

终止性CREATE子句

一个未被其他子句跟随的CREATE子句被称为终止子句。当Cypher查询以终止子句结束时,Cypher函数调用不会返回任何结果。然而,Cypher函数调用仍然需要列定义。当Cypher以终止节点结束时,在列定义中定义一个单一值:在这个变量中不会返回任何数据。

示例

SELECT *
FROM cypher('graph_name', $$
    CREATE /* 在这里创建子句,没有后续子句 */
$$) as (a agtype);

返回结果如下:

 a 
---
(0 rows)

数据准备

SELECT create_graph('graph_name');

创建单个顶点

创建单个顶点可以通过发出以下查询来完成。

示例

SELECT *
FROM cypher('graph_name', $$
    CREATE (n)
$$) as (v agtype);

此查询不会返回任何内容。

 v 
---
(0 rows)

创建多个顶点

通过逗号分隔来创建多个顶点。

示例

SELECT *
FROM cypher('graph_name', $$
    CREATE (n), (m)
$$) as (v agtype);

返回结果如下:

 v 
---
(0 rows)

创建带有标签的顶点

在创建顶点时添加标签,使用以下语法:

示例

SELECT *
FROM cypher('graph_name', $$
    CREATE (:Person)
$$) as (v agtype);

此查询不会返回任何内容。

 v 
---
(0 rows)

创建带有标签和属性的顶点

您可以创建同时具备标签和属性的顶点。

示例

SELECT *
FROM cypher('graph_name', $$
    CREATE (:Person {name: 'Andres', title: 'Developer'})
$$) as (n agtype);

此查询不会返回任何内容。

 n 
---
(0 rows)

返回创建的节点

您可以在同一个查询中创建并返回一个节点,如下所示:

示例

SELECT *
FROM cypher('graph_name', $$
    CREATE (a {name: 'Andres'})
    RETURN a
$$) as (a agtype);

将返回新创建的节点:

                             a                                        
-----------------------------------------------------------
{id: 0; label: ''; properties: {name: 'Andres'}}::vertex
(1 row)

在两个节点之间创建边

要在两个顶点之间创建一条边,首先需要MATCH这两个顶点。一旦节点匹配成功,就在它们之间创建一条边。

示例

SELECT *
FROM cypher('graph_name', $$
    MATCH (a:Person), (b:Person)
    WHERE a.name = 'Node A' AND b.name = 'Node B'
    CREATE (a)-[e:RELTYPE]->(b)
    RETURN e
$$) as (e agtype);

将返回创建的边:

                                   e                                                                
--------------------------------------------------------------------------
{id: 3; startid: 0, endid: 1; label: 'RELTYPE'; properties: {}}::edge
(1 row)

创建边并设置属性

在边上设置属性的方法与创建顶点时设置属性类似。请注意,值可以是任何表达式。

示例

SELECT *
FROM cypher('graph_name', $$
    MATCH (a:Person), (b:Person)
    WHERE a.name = 'Node A' AND b.name = 'Node B'
    CREATE (a)-[e:RELTYPE {name:a.name + '<->' + b.name}]->(b)
    RETURN e
$$) as (e agtype);

将返回创建的边:

                                             e                                                                  
-------------------------------------------------------------------------------------------------
{id: 3; startid: 0, endid: 1; label: 'RELTYPE'; properties: {name: 'Node A<->Node B'}}::edge
(1 row)

创建完整路径

当使用CREATE和模式时,所有当前不在作用域内的模式部分都将被创建。

示例

SELECT *
FROM cypher('graph_name', $$
    CREATE p = (andres {name:'Andres'})-[:WORKS_AT]->(neo)<-[:WORKS_AT]-(michael {name:'Michael'})
    RETURN p
$$) as (p agtype);

将返回创建的边:

                                             p                                                               
-------------------------------------------------------------------------------------------------
[{id:0; label: ‘’; properties:{name:’Andres’}}::vertex,
{id: 3; startid: 0, endid: 1; label: ‘WORKS_AT’; properties: {}}::edge,
{id:1; label: ‘’; properties: {}}::vertex,
{id: 3; startid: 2, endid: 1; label: ‘WORKS_AT’; properties: {}}::edge,
{id:2; label: ‘’; properties: {name:’Michael’}}::vertex]::path
(1 row)