二、neo4j入门笔记(Cypher语法与简单实例)(一)

一、专业名词

可以参考https://blog.csdn.net/alex_xfboy/article/details/82970127#3.%20%E4%B8%93%E4%B8%9A%E5%90%8D%E8%AF%8D,图文并茂写的非常好,这里我只是做个人的简单总结。

Node Labels 表示存在的节点

Relationship Types表示存在的关系

Property Keys 表示节点或者关系的属性


二、语法现象

这里我参照官方文档,以及官方手册。登陆http://localhost:7474/browser/,在jump into code中点击按钮,

我们可以看到它包含Create、Find、Query、Solve,这只是笼统的叫法,接下来会有详细的语法规则

1、CREATE


在这个例子中,它创造了许多电影、人物,并赋予人物与电影以关系(出演、导演、编剧等),还有人物与人物的关系(follows关系等),效果如图

示例结束

现在具体讲述CREATE语法规则

先看一个例子

CREATE (:Movie { title:"The Matrix",released:1997 }

我们可以看到它没有返回数据,有一个node(节点),一个label(标签),两个properties(属性)。

+-----------------------+

| No data returned.|

+-----------------------+

Nodes created: 1 

Properties set: 2 

Labels added: 1


如果我们还想返回创建的数据,我们可以添加一个return子句

CREATE (p:Person { name:"Keanu Reeves", born:1964 })

RETURN p

这是返回的内容

+----------------------------------------+

| p                                      |

+----------------------------------------+

| Node[1]{name:"Keanu Reeves",born:1964} |

+----------------------------------------+

1 row

Nodes created: 1

Properties set: 2

Labels added: 1

当然,我们也可以创建更复杂的结构,比如ACTED_IN与角色信息的关系,或者DIRECTED的直接关系。

CREATE (a:Person { name:"Tom Hanks",

  born:1956 })-[r:ACTED_IN { roles: ["Forrest"]}]->(m:Movie { title:"Forrest Gump",released:1994 })

CREATE (d:Person { name:"Robert Zemeckis", born:1951 })-[:DIRECTED]->(m)

RETURN a,d,r,

这里说明一下,Cypher使用一对破折号(--)来表示无向关系。有向关系在一端有一个箭头(<--, -->)。括号内的表达式([…])可用于添加细节。这可能包括变量、属性和类型信息:

形如

-->

-[role]->

-[:ACTED_IN]->

-[role:ACTED_IN]->

-[role:ACTED_IN {roles: ["Neo"]}]->

节点间的关系如图


2、MATCH

要查找到目前为止我们创建的数据,我们可以开始查找标记为Movie label的所有节点。

MATCH (m:Movie)

RETURN m

结果:

我们也可以找一个特定的person,比如Keanu Reeves

MATCH (p:Person { name:"Keanu Reeves" })

RETURN p

此查询返回匹配的节点


我们也可以找到更多有趣的联系,比如Tom Hanks扮演的电影片名和他扮演的角色。

MATCH (p:Person { name:"Tom Hanks" })-[r:ACTED_IN]->(m:Movie)

RETURN m.title, r.roles

+-------------------------------------+

| m.title                | r.roles       |

+-------------------------------------+

| "Forrest Gump" | ["Forrest"]  |

+-------------------------------------+

1 row

现在,我们已经知道如何将新节点连接到现有节点,并且可以结合使用MATCH和CREATE来将结构附加到图中。


3、附加结构(小实例)

为了用新的信息扩展图,我们首先匹配现有的连接点,然后用关系将新创建的节点附加到它们上。加入电影《Cloud Atlas》作为Tom Hanks的新电影可以这样实现:

MATCH (p:Person { name:"Tom Hanks" })

CREATE (m:Movie { title:"Cloud Atlas",released:2012 })

CREATE (p)-[r:ACTED_IN { roles: ['Zachry']}]->(m)

RETURN p,r,m


重要的是要记住,我们可以将变量分配给节点和关系,并在以后使用它们,无论它们是创建的还是匹配的。

可以在一个CREATE子句中附加节点和关系。但是为了可读性,将它们分开会有所帮助。


MATCH和CREATE组合的一个棘手之处是,每个匹配模式都有一行。这将导致后续的CREATE语句对每一行执行一次。在很多情况下,这就是你想要的。

如果不打算这样做,请在匹配之前移动CREATE语句,或者使用后面讨论的方法更改查询的基数,或者使用下一个子句的get或CREATE语义的:MERGE。

4、MERGE

merge可以看成是match和create的合体,留着下次再讲。

你可能感兴趣的:(二、neo4j入门笔记(Cypher语法与简单实例)(一))