添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
豪气的炒饭  ·  KingbaseES ...·  3 月前    · 
果断的汽水  ·  mongofiles - MongoDB ...·  5 月前    · 
长情的人字拖  ·  Enhance Visual Appeal ...·  5 月前    · 

注意事项 :

1、Neo4j数据库服务器使用此 将此节点详细信息存储在Database.As中作为Neo4j DBA或Developer,不能使用它来访问节点详细信息。

2、Neo4j数据库服务器创建一个 作为内部节点名称的别名。作为Neo4j DBA或Developer,应该使用此标签名称来访问节点详细信息。

命令如下:

1
CREATE (emp:Employee)

这里 emp 是一个节点名,Employee 是 emp 节点的标签名称

1
2
3
4
5
6
7
8
9
{
"identity": 0,
"labels": [
"Employee"
],
"properties": {

}
}

2.1.2 创建具有属性的节点

创建一个具有一些属性(键值对)的节点来存储数据

CREATE命令语法

1
2
3
4
5
6
7
8
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>
}
)

创建具有一些属性(deptno,dname,位置)的Dept节点

1
CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })

这里dept是一个节点名,Dept是dept节点的标签名称。这里的属性名称是deptno,dname,location属性值为10,”Accounting”,”Hyderabad” ,Property = deptno:10

因为deptno是一个整数属性,所以没有使用单引号或双引号定义其值10。

由于dname和location是String类型属性,因此使用单引号或双引号定义其值。

注意 - 要定义字符串类型属性值,需要使用单引号或双引号。

结果如下:

1
2
3
4
5
6
7
8
9
10
11
{
"identity": 1,
"labels": [
"Dept"
],
"properties": {
"location": "Hyderabad",
"dname": "Accounting",
"deptno": 10
}
}

使用示例2

创建具有一些属性(id,name,sal,deptno)的Employee节点

1
CREATE (emp:Employee{id:123,name:"Lokesh",sal:35000,deptno:10})

这里emp是一个节点名。Employee是emp节点的标签名称

结果如下(包含2.1.1中创建的节点)

1
2
3
4
5
6
7
8
9
10
11
12
{
"identity": 2,
"labels": [
"Employee"
],
"properties": {
"name": "Lokesh",
"id": 123,
"deptno": 10,
"sal": 35000
}
}

2.2 MATCH命令

MATCH 命令用于

  • 从数据库获取有关节点和属性的数据
  • 从数据库获取有关节点,关系和属性的数据
  • MATCH 命令语法:

    1
    2
    3
    4
    MATCH 
    (
    <node-name>:<label-name>
    )
  • Neo4j 数据库服务器使用此 将此节点详细信息存储在 Database.As 中作为 Neo4j DBA 或 Developer,不能使用它来访问节点详细信息。
  • Neo4j 数据库服务器创建一个 作为内部节点名称的别名。作为 Neo4j DBA 或 Developer,应该使用此标签名称来访问节点详细信息。
  • 注意- 不能单独使用 MATCH Command 从数据库检索数据。 如果单独使用它,那么将 InvalidSyntax 错误。

    例如执行:

    1
    MATCH (dept:Dept)

    MATCH 经常需要与其他的语句配合才可以使用.

    如:match (n) return n

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 查询Dept下的内容
    MATCH (dept:Dept) return dept

    # 查询Employee标签下 id=123,name="Lokesh"的节点
    MATCH (p:Employee {id:123,name:"Lokesh"}) RETURN p

    ## 查询Employee标签下name="Lokesh"的节点,使用(where命令)
    MATCH (p:Employee)
    WHERE p.name = "Lokesh"
    RETURN p

    2.3 RETURN子句

    RETURN子句用于

  • 检索节点的某些属性
  • 检索节点的所有属性
  • 检索节点和关联关系的某些属性
  • 检索节点和关联关系的所有属性
  • RETURN命令语法:

    1
    2
    3
    4
    RETURN 
    <node-name>.<property1-name>,
    ........
    <node-name>.<propertyn-name>

    语法说明:

    *注意- 不能单独使用 RETURN Command 从数据库检索数据。 如果单独使用它,那么将 SyntaxError 错误。*

    1
    RETURN dept.deptno

    2.4 MATCH & RETURN匹配和返回

    在Neo4j CQL中,不能单独使用MATCH或RETURN命令,因此应该合并这两个命令以从数据库检索数据。

    Neo4j使用CQL MATCH + RETURN命令 -

  • 检索节点的某些属性
  • 检索节点的所有属性
  • 检索节点和关联关系的某些属性
  • 检索节点和关联关系的所有属性
  • 2.4.1 命令语法

    MATCH RETURN命令语法

    1
    2
    MATCH Command
    RETURN Command

    语法说明:

    2.4.2 使用示例1

    本示例演示如何从数据库检索Dept节点的一些属性(deptno,dname)数据。

    注- 结点包含3个属性:deptno,dname,location。 然而在这个例子中,感兴趣的是只查看两个属性数据。

    命令如下:

    1
    2
    MATCH (dept: Dept)
    RETURN dept.deptno,dept.dname
  • dept是节点名称
  • 这里Dept是一个节点标签名
  • deptno是dept节点的属性名称
  • dname是dept节点的属性名
  • 运行结果如下:

    2.4.3 使用示例2

    此示例演示如何从数据库检索Dept节点的数据,而无需指定其属性。

    注- 结点包含3个属性:deptno,dname,location。

    命令如下:

    1
    2
    MATCH (e:Employee)
    RETURN e

    这里e是一个节点名,Employee是一个节点标签名

    运行结果如下:

    2.5 关系类型

    在Neo4j CQL中,不能单独使用MATCH或RETURN命令,因此应该结合这两个命令从数据库检索数据。

    本示例演示如何使用属性和这两个节点之间的关系创建两个节点。

    注- 将创建两个节点:客户节点 (Customer) 和信用卡节点 (CreditCard)。

  • 客户节点包含:ID,姓名,出生日期属性
  • CreditCard节点包含:id,number,cvv,expiredate属性
  • 客户与信用卡关系:DO_SHOPPING_WITH
  • CreditCard到客户关系:ASSOCIATED_WITH
  • 将在以下步骤中处理此示例: -

  • 创建客户节点
  • 创建CreditCard节点
  • 观察先前创建的两个节点:Customer和CreditCard
  • 创建客户和CreditCard节点之间的关系
  • 查看新创建的关系详细信息
  • 详细查看每个节点和关系属性
  • 创建客户节点

    命令如下:

    1
    CREATE (e:Customer{id:"1001",name:"Abc",dob:"01/10/1982"})

    参数解释如下:

  • e是节点名称
  • 在这里Customer是节点标签名称
  • id,name和dob是Customer节点的属性名称
  • 创建CreditCard节点

    命令如下:

    1
    CREATE (cc:CreditCard{id:"5001",number:"1234567890",cvv:"888",expiredate:"20/17"})

    这里cc是一个节点名,CreditCard是节点标签名称; id,number,cvv和expiredate是CreditCard节点的属性名称

    Neo4j图数据库遵循属性图模型来存储和管理其数据。

    根据属性图模型,关系应该是定向的。 否则,Neo4j将抛出一个错误消息。

    基于方向性,Neo4j关系被分为两种主要类型。

    在以下场景中,可以使用Neo4j CQL CREATE命令来创建两个节点之间的关系。 这些情况适用于Uni和双向关系。

  • 在两个现有节点之间创建无属性的关系
  • 在两个现有节点之间创建有属性的关系
  • 在两个新节点之间创建无属性的关系
  • 在两个新节点之间创建有属性的关系
  • 在具有WHERE子句的两个退出节点之间创建/不使用属性的关系
  • 将创建客户和CreditCard之间的关系,如下所示:

    此图描述了客户与CreditCard之间的关系

    客户→信用卡 ,这里的关系是箭头标记(→)。由于Neo4j CQL语法是以人类可读的格式。 Neo4j CQL也使用类似的箭头标记来创建两个节点之间的关系。

    每个关系(→)包含两个节点

    从上图中,Customer节点是“From Node”,CreditCard Node是“To Node”这种关系。

    对于节点,它们是两种关系

    从上图中,关系是到客户节点的“外向关系”,并且相同的关系是到信用卡节点的“到达关系”。

    考虑下面的图。 这里创建了从“CreditCard”节点到“客户”节点的关系。

    从上面的图中,关系是“出局关系”到“信用卡”节点,并且相同的关系是“到达关系”到“客户”节点。

    考虑下面的图。 在“CreditCard”和“Customer”节点之间创建了两个关系:一个从“CreditCard”到“Customer”。 另一个从“客户”到“信用卡”。 这意味着它是双向关系。

    2.5.1 使用现有节点创建没有属性的关系

    在这种情况下,将使用两个现有节点:CreditCard和Customer创建没有属性的关系。 这意味着,的Neo4J数据库应该有这两个节点。

    使用CQL MATCH命令检索现有的两个节点和CQL CREATE命令,以创建它们之间的新关系。

    1
    2
    3
    4
    5
    MATCH (<node1-label-name>:<nodel-name>),(<node2-label-name>:<node2-name>)
    CREATE
    (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
    {<define-properties-list>}]->(<node2-label-name>)
    RETURN <relationship-label-name>

    语法说明:

    1
    2
    MATCH (e:Customer),(cc:CreditCard) 
    CREATE (e)-[r:DO_SHOPPING_WITH ]->(cc)

    这里关系名称为“DO_SHOPPING_WITH” , 关系标签为“r”。e和Customer分别是客户节点的节点名称和节点标签名称。cc和CreditCard分别是CreditCard节点的节点名和节点标签名。

    执行成功后,再执行以下命令

    1
    2
    MATCH (e)-[r:DO_SHOPPING_WITH ]->(cc) 
    RETURN r

    结果如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    {
    "identity": 2,
    "start": 6,
    "end": 7,
    "type": "DO_SHOPPING_WITH",
    "properties": {

    }
    }

    查看数据,可以看到:

    2.5.2 使用现有节点创建有属性的关系

    在这种情况下,将使用两个现有节点:CreditCard和Customer创建与属性的关系。 这意味着,的Neo4J数据库应该有这两个节点。

    使用CQL MATCH命令检索现有的两个节点和CQL CREATE命令,以创建它们之间的新关系。

    1
    2
    3
    4
    5
    MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
    CREATE
    (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
    {<define-properties-list>}]->(<node2-label-name>)
    RETURN <relationship-label-name>

    语法说明:

    可以表示这{}如下。

    1
    2
    3
    4
    5
    6
    { 
    <property1-name>:<property1-value>,
    <property2-name>:<property2-value>,
    ...
    <propertyn-name>:<propertyn-value>
    }

    语法说明:

    1
    2
    MATCH (cc:CreditCard) 
    RETURN cc

    输入以下命令

    1
    2
    3
    MATCH (cust:Customer),(cc:CreditCard) 
    CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)
    RETURN r

    参数解释如下:

  • 关系名称为“DO_SHOPPING_WITH”
  • 关系标签为“r”。
  • shopdate和price是关系“r”的属性。
  • cust和Customer分别是客户节点的节点名称和节点标签名称。
  • cc和CreditCard分别是CreditCard节点的节点名和节点标签名。
  • 由于使用RETURN子句,不需要单独的MATCH + RETRUN命令来查看详细信息。 它在UI模式下显示它们之间的节点和关系

    2.5.3 使用新节点创建没有属性的关系

    在这种情况下,将一次创建两个没有属性的节点和关系。 这意味着,的Neo4J数据库没有这两个节点。

    使用CQL CREATE命令一次创建两个结束节点和它们之间的新关系。

    1
    2
    3
    4
    5
    CREATE  
    (<node1-label-name>:<node1-name>)-
    [<relationship-label-name>:<relationship-name>]->
    (<node1-label-name>:<node1-name>)
    RETURN <relationship-label-name>

    语法说明:

  • 关系标签是“like”。
  • fb1和FaceBookProfile1分别是“From Node”的节点名和节点标签名。
  • fb2和FaceBookProfile2分别是“To Node”的节点名和节点标签名。
  • 执行结果如下:

    查看创建的数据

    1
    2
    MATCH (fb1:FaceBookProfile1)-[like:LIKES]->(fb2:FaceBookProfile2) 
    RETURN like

    结果如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    {
    "identity": 5,
    "start": 10,
    "end": 11,
    "type": "LIKES",
    "properties": {

    }
    }

    2.5.4 使用新节点创建有属性的关系

    在这种情况下,将一次创建两个节点和关系属性。 这意味着,的Neo4J数据库没有这两个节点。

    使用CQL CREATE命令一次创建两个结束节点和它们之间的新关系。

    1
    2
    3
    4
    5
    CREATE  
    (<node1-label-name>:<node1-name>{<define-properties-list>})-
    [<relationship-label-name>:<relationship-name>{<define-properties-list>}]
    ->(<node1-label-name>:<node1-name>{<define-properties-list>})
    RETURN <relationship-label-name>

    语法说明:

    可以表示这个{ }如下。

    1
    2
    3
    4
    5
    6
    { 
    <property1-name>:<property1-value>,
    <property2-name>:<property2-value>,
    ...
    <propertyn-name>:<propertyn-value>
    }
    1
    2
    3
    CREATE (video1:YoutubeVideo1{title:"Action Movie1",updated_by:"Abc",uploaded_date:"10/10/2010"})
    -[movie:ACTION_MOVIES{rating:1}]->
    (video2:YoutubeVideo2{title:"Action Movie2",updated_by:"Xyz",uploaded_date:"12/12/2012"})

    参数解释如下:

  • 这里的关系名称是“ACTION_MOVIES”
  • 关系标签是“电影”。
  • video1和YoutubeVideo1分别是“From Node”的节点名和节点标签名。
  • video2和YoutubeVideo2分别是“To Node”的节点名和节点标签名。
  • 待上述命令执行成功,可通过一下命令查看结果

    1
    2
    MATCH (video1:YoutubeVideo1)-[movie:ACTION_MOVIES]->(video2:YoutubeVideo2) 
    RETURN movie

    2.5.5 检索关系节点的详细信息

    可以使用MATCH + RETURN命令来查看单独创建或作为关系的一部分创建的节点的详细信息。

    在本章中,将讨论如何检索参与关系的Node的详细信息。

    1
    2
    3
    MATCH 
    (<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
    RETURN <relationship-label-name>

    语法说明:

    此示例演示如何检索用于创建关系的“表单节点”和“到节点”节点的详细信息。

    1
    2
    MATCH (cust)-[r:DO_SHOPPING_WITH]->(cc) 
    RETURN cust,cc

    2.6 CREATE创建标签

    Label是Neo4j数据库中的节点或关系的名称或标识符。可以将此标签名称称为关系为“关系类型”。

    可以使用CQL CREATE命令为节点或关系创建单个标签,并为节点创建多个标签。 这意味着Neo4j仅支持两个节点之间的单个关系类型。可以在UI模式和网格模式下在CQL数据浏览器中观察此节点或关系的标签名称。 并且引用它执行CQL命令。到目前为止,只创建了一个节点或关系的标签,但没有讨论它的语法。

    使用Neo4j CQL CREATE命令

  • 为节点创建单个标签
  • 为节点创建多个标签
  • 为关系创建单个标签
  • 2.6.1 单个标签到节点

    语法:

    1
    CREATE (<node-name>:<label-name>)
  • 应该使用colon(:)运算符来分隔节点名和标签名。
  • Neo4j数据库服务器使用此名称将此节点详细信息存储在Database.As Neo4j DBA或Developer中,不能使用它来访问节点详细信息
  • Neo4j数据库服务器创建一个标签名称作为内部节点名称的别名。作为Neo4j DBA或开发人员,应该使用此标签名称来访问节点详细信息。
  • 本示例演示如何为“GooglePlusProfile”节点创建单个标签。

    1
    CREATE (google1:GooglePlusProfile)

    这里的google1是一个节点名,GooglePlusProfile是google1node的标签名称

    可以观察到在Neo4j数据库中创建了一个标签和一个节点。

    2.6.2 多个标签到节点

    语法:

    1
    CREATE (<node-name>:<label-name1>:<label-name2>.....:<label-namen>)

    本示例演示如何为“Cinema”节点创建多个标签名称。的客户提供的多个标签名称:Cinema,Film,Movie,Picture。

    1
    CREATE (m:Movie:Cinema:Film:Picture)

    这里m是一个节点名,Movie, Cinema, Film, Picture是m节点的多个标签名称

    2.6.3 单个标签到关系

    语法:

    1
    2
    3
    CREATE (<node1-name>:<label1-name>)-
    [(<relationship-name>:<relationship-label-name>)]
    ->(<node2-name>:<label2-name>)
  • 应该使用colon(:)运算符来分隔节点名和标签名。
  • 应该使用colon(:)运算符来分隔关系名称和关系标签名称。
  • 应该使用colon(:)运算符将一个标签名称分隔到另一个标签名称。
  • Neo4J数据库服务器使用此名称将此节点详细信息存储在Database.As中作为Neo4J DBA或开发人员,不能使用它来访问节点详细信息。
  • Neo4J Database Server创建一个标签名称作为内部节点名称的别名。作为Neo4J DBA或Developer,应该使用此标签名称来访问节点详细信息。
  • 本示例演示如何为关系创建标签

    1
    CREATE (p1:Profile1)-[r1:LIKES]->(p2:Profile2)

    参数解释如下:

  • 这里p1和profile1是节点名称和节点标签名称“From Node”
  • p2和Profile2是“To Node”的节点名称和节点标签名称
  • r1是关系名称
  • LIKES是一个关系标签名称
  • 2.7 WHERE子句

    2.7.1 语法说明

    像SQL一样,Neo4j CQL在CQL MATCH命令中提供了WHERE子句来过滤MATCH查询的结果。

    简单WHERE子句语法

    1
    WHERE <condition>

    复杂WHERE子句语法

    1
    WHERE <condition> <boolean-operator> <condition>

    可以使用布尔运算符在同一命令上放置多个条件。

    1
    <property-name> <comparison-operator> <value>

    语法说明:

    2.7.2 使用示例

    此示例演示如何在MATCH Command中的CQL WHERE子句中使用多个条件与布尔运算符,以根据员工名称检索员工详细信息。

    1
    2
    MATCH (emp:Employee)
    RETURN emp.empid,emp.name,emp.salary,emp.deptno

    观察结果,它返回4个员工节点详细信息.

    1
    2
    3
    MATCH (emp:Employee) 
    WHERE emp.name = 'Abc' OR emp.name = 'Xyz'
    RETURN emp

    观察到结果,它只返回两个名为“Abc”或“Xyz”的员工详细信息。

    2.7.3 用WHERE子句创建关系

    在Neo4J CQL中,可以以不同的方式创建拖曳节点之间的关系。

  • 创建两个现有节点之间的关系
  • 一次创建两个节点和它们之间的关系
  • 使用WHERE子句创建两个现有节点之间的关系
  • 1
    2
    3
    4
    MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>) 
    WHERE <condition>
    CREATE (<node1-label-name>)-[<relationship-label-name>:<relationship-name>
    {<relationship-properties>}]->(<node2-label-name>)

    语法说明:

    1
    2
    3
    4
    MATCH (cust:Customer),(cc:CreditCard) 
    WHERE cust.id = "1001" AND cc.id= "5001"
    CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc)
    RETURN r

    2.8 DELETE删除

    Neo4j使用CQL DELETE子句

  • 删除节点。
  • 删除节点及相关节点和关系。
  • 2.8.1 删除节点

    通过使用此命令,可以从数据库永久删除节点及其关联的属性。

    DELETE节点子句语法

    1
    DELETE <node-name-list>
    1
    MATCH (e: Employee) RETURN e
    1
    2
    3
    4
    5
    MATCH (e: 'Employee') RETURN e

    MATCH (e: "Employee") RETURN e

    MATCH (e: Employee) RETURN e

    所有三个命令都相同,可以选择这些命令中的任何一个。

    接下来执行

    1
    MATCH (e: Employee) DELETE e

    现在,而不是“返回e”,使用“DELETE e”命令删除Employee节点

    再执行查询语句

    1
    MATCH (e: Employee) RETURN e

    可以发现,数据已被删除。

    2.8.2 DELETE节点和关系子句

    语法

    1
    DELETE <node1-name>,<node2-name>,<relationship-name>

    首先查询关系

    1
    MATCH (cc:CreditCard)-[r]-(c:Customer)RETURN r

    在这里观察到一个节点为客户,一个节点为信用卡和它们之间的关系是可用的。

    接下来执行删除语句

    1
    2
    MATCH (cc: CreditCard)-[rel]-(c:Customer) 
    DELETE cc,c,rel

    这里可以观察到两个节点及其关联的10个关系被成功删除。

    2.8.3 清空所有数据

    两种方法:

    一、用下列 Cypher 语句:

    1
    match (n) detach delete n

    1、停掉服务;

    2、删除 graph.db 目录;

    3、重启服务。

    2.9 REMOVE删除

    有时需要向现有节点或关系添加或删除属性 , 使用Neo4j CQL SET子句向现有节点或关系添加新属性,使用Neo4j CQL REMOVE子句来删除节点或关系的现有属性。

    REMOVE命令用于

  • 删除节点或关系的标签
  • 删除节点或关系的属性

    DELETE和 REMOVE 命令之间的主要区别 -

  • DELETE操作用于删除节点和关联关系。

  • REMOVE操作用于删除标签和属性。

    DELETE和REMOVE命令之间的相似性 -

  • 这两个命令不应单独使用。

  • 两个命令都应该与MATCH命令一起使用。
  • 2.9.1 删除节点/关系的属性

    可以使用相同的语法从数据库中永久删除节点或关系的属性或属性列表。

    REMOVE属性子句语法

    1
    REMOVE <property-name-list>

    <属性名称列表>语法

    1
    2
    3
    4
    <node-name>.<property1-name>,
    <node-name>.<property2-name>,
    ....
    <node-name>.<propertyn-name>

    语法说明:

    先创建数据

    1
    CREATE (book:Book {id:122,title:"Neo4j Tutorial",pages:340,price:250})

    然后查询数据

    1
    2
    MATCH (book : Book)
    RETURN book

    解下来执行删除语句(从书节点中删除“price”属性)

    1
    2
    3
    MATCH (book { id:122 })
    REMOVE book.price
    RETURN book

    再次查询数据,可以看到此属性已被删除

    2.9.2 删除节点/关系的标签

    可以使用相同的语法从数据库中永久删除节点或关系的标签或标签列表。

    REMOVE一个Label子句语法:

    1
    REMOVE <label-name-list>

    此示例演示如何从数据库永久删除不需要的标签到节点。

    1
    2
    MATCH (m:Movie) 
    REMOVE m:Picture

    2.10 SET子句

    有时需要向现有节点或关系添加新属性,要做到这一点,Neo4j CQL 提供了一个SET子句。

    Neo4j CQL 已提供 SET 子句来执行以下操作。

  • 向现有节点或关系添加新属性
  • 添加或更新属性值
  • SET子句语法

    1
    SET  <property-name-list>

    <属性名称列表>语法:

    1
    2
    3
    4
    <node-label-name>.<property1-name>,
    <node-label-name>.<property2-name>,
    ....
    <node-label-name>.<propertyn-name>

    语法说明:

    1
    2
    3
    MATCH (book:Book)
    SET book.title = 'superstar'
    RETURN book

    2.11 ORDER BY排序

    Neo4j CQL在MATCH命令中提供了“ORDER BY”子句,对MATCH查询返回的结果进行排序。

    可以按升序或降序对行进行排序。默认情况下,它按升序对行进行排序。 如果要按降序对它们进行排序,需要使用DESC子句。

    ORDER BY子句语法

    1
    ORDER BY  <property-name-list>  [DESC]

    <property-name-list> 语法:

    1
    2
    3
    4
    <node-label-name>.<property1-name>,
    <node-label-name>.<property2-name>,
    ....
    <node-label-name>.<propertyn-name>

    语法说明:

    此示例演示如何按照升序排序“员工名称”结果。

    1
    2
    3
    MATCH (emp:Employee)
    RETURN emp.empid,emp.name,emp.salary,emp.deptno
    ORDER BY emp.name

    此示例演示如何按照员工名称按降序使用排序结果

    1
    2
    3
    MATCH (emp:Employee)
    RETURN emp.empid,emp.name,emp.salary,emp.deptno
    ORDER BY emp.name DESC

    2.12 UNION合并

    与SQL一样,Neo4j CQL有两个子句,将两个不同的结果合并成一组结果

  • UNION
  • UNION ALL
  • 2.12.1 UNION子句

    它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。

    结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。

    UNION子句语法

    1
    2
    3
    <MATCH Command1>
    UNION
    <MATCH Command2>

    语法说明:

    如果这两个查询不返回相同的列名和数据类型,那么它抛出一个错误。

    2.12.2 UNION ALL子句

    它结合并返回两个结果集的所有行成一个单一的结果集。它还返回由两个节点重复行。

    结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该是相同的,列的数据类型应该是相同的。

    UNION ALL子句语法

    1
    2
    3
    <MATCH Command1>
    UNION ALL
    <MATCH Command2>

    如果这两个查询不返回相同的列名和数据类型,那么它抛出一个错误。

    2.13 LIMIT和SKIP子句

    2.13.1 LIMIT子句

    Neo4j CQL已提供“LIMIT”子句来过滤或限制查询返回的行数。 它修剪CQL查询结果集底部的结果。如果要修整CQL查询结果集顶部的结果,那么应该使用CQL SKIP子句。 请参考本章的下一节CQL SKIP子句。

    LIMIT子句语法

    1
    LIMIT <number>

    语法说明:

    得到的结果如下:

    2.13.2 SKIP子句

    Neo4j CQL已提供“SKIP”子句来过滤或限制查询返回的行数。 它修整了CQL查询结果集顶部的结果。如果要从CQL查询结果集底部修整结果,那么应该使用CQL LIMIT子句。

    SKIP子句语法:

    1
    SKIP <number>

    语法说明:

    1
    2
    3
    MATCH (emp:Employee) 
    RETURN emp
    SKIP 2

    2.14 IN操作符

    与SQL一样,Neo4j CQL提供了一个IN运算符,以便为CQL命令提供值的集合。

    IN操作符语法

    1
    IN[<Collection-of-values>]

    语法说明:

    1
    2
    3
    MATCH (e:Employee) 
    WHERE e.id IN [123,124]
    RETURN e.id,e.name,e.sal,e.deptno

    2.15 ID属性

    在Neo4j中,“Id”是节点和关系的默认内部属性。 这意味着,当创建一个新的节点或关系时,Neo4j数据库服务器将为内部使用分配一个数字。 它会自动递增。

    以相同的方式,Neo4j数据库服务器为关系分配一个默认Id属性。

  • 节点的Id属性的最大值约为35亿。
  • Id的最大值关系的属性的大约35亿。
  • 二 CQL函数

    2.1 AGGREGATION聚合

    和SQL一样,Neo4j CQL提供了一些在RETURN子句中使用的聚合函数。 它类似于SQL中的GROUP BY子句。

    可以使用MATCH命令中的RETURN +聚合函数来处理一组节点并返回一些聚合值。

    聚合函数列表

    2.1.3 AVG和SUM函数

    AVG

    它采用一组行和节点或关系的 <property-name> 作为输入,并从给定行的 give <property-name> 列中查找平均值。

    函数的语法

    1
    AVG(<property-name> )

    它采用一组行和节点或关系的 <property-name> 作为输入,并从给定行的 give <property-name> 列中查找求和值。

    函数的语法

    1
    SUM(<property-name> )
    1
    MATCH (n:Book) RETURN avg(n.born),sum(n.born)

    2.2 关系函数

    Neo4j CQL提供了一组关系函数,以在获取开始节点,结束节点等细节时知道关系的细节。

    关系函数列表

    2.2.1 STARTNODE和ENDNODE

    它需要一个字符串作为输入并为大写格式, 所有CQL函数应使用“()”括号。

    1
    2
    STARTNODE (<relationship-label-name>)
    ENDNODE (<relationship-label-name>)

    <relationship-label-name> 可以是来自Neo4j数据库的节点或关系的属性名称。

    1
    2
    MATCH (a)-[movie:ACTION_MOVIES]->(b) 
    RETURN STARTNODE(movie)
    1
    2
    MATCH (a)-[movie:ACTION_MOVIES]->(b) 
    RETURN ENDNODE(movie)

    2.2.2 ID和TYPE

    ID和TYPE关系函数来检索关系的Id和类型详细信息。

    1
    2
    MATCH (a)-[movie:ACTION_MOVIES]->(b) 
    RETURN ID(movie),TYPE(movie)

    三 索引

    Neo4j SQL支持节点或关系属性上的索引,以提高应用程序的性能。可以为具有相同标签名称的所有节点的属性创建索引,也可以在MATCH或WHERE或IN运算符上使用这些索引列来改进CQL Command的执行。

  • Create Index 创建索引
  • Drop Index 丢弃索引
  • 3.1 创建索引

    创建索引语法:

    Neo4j的CQL提供“CREATE INDEX”命令创建的节点或关系的属性索引。

    创建索引的语法:

    1
    CREATE INDEX ON :<label_name> (<property_name>)

    冒号(:)运算符用于引用节点或关系标签名称。

    上述语法描述它在节点或关系的 上创建一个新索引。

    1
    CREATE INDEX ON :Customer (name)

    3.2 丢弃索引

    Neo4j CQL已提供“DROP INDEX”命令删除NODE或Relationship的属性的现有索引。

    Drop Index语法:

    1
    DROP INDEX ON :<label_name> (<property_name>)

    冒号(:)运算符用于引用节点或关系标签名称。

    上述语法描述它删除在节点或关系的 上创建的现有索引。

    1
    DROP INDEX ON :Customer (name)

    四 约束

    在Neo4j数据库中,CQL CREATE命令始终创建新的节点或关系,这意味着即使您使用相同的值,它也会插入一个新行。 根据对某些节点或关系的应用需求,必须避免这种重复。 然后不能直接得到这个。 应该使用一些数据库约束来创建节点或关系的一个或多个属性的规则。

    像SQL一样,Neo4j数据库也支持对NODE或Relationship的属性的UNIQUE约束

    UNIQUE约束的优点

  • 避免重复记录。
  • 强制执行数据完整性规则。
  • Neo4j CQL已提供“CREATE CONSTRAINT”命令,以在NODE或关系的属性上创建唯一约束。

    4.1 创建约束

    创建唯一约束语法

    1
    2
    CREATE CONSTRAINT ON (<label_name>)
    ASSERT <property_name> IS UNIQUE

    语法说明:

    上述语法描述了它的 节点或关系创造了一个独特的约束。

    4.2 删除约束

    Neo4j CQL提供了“DROP CONSTRAINT”命令,以从NODE或Relationship的属性中删除现有的Unique约束。

    删除UNIQUE约束语法:

    1
    2
    DROP CONSTRAINT ON (<label_name>)
    ASSERT <property_name> IS UNIQUE

    上述语法描述它从节点或关系的 中删除唯一约束。

    五 官方示例

    5.1 初始化脚本

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
    CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
    CREATE (Carrie:Person {name:'Carrie-Anne Moss', born:1967})
    CREATE (Laurence:Person {name:'Laurence Fishburne', born:1961})
    CREATE (Hugo:Person {name:'Hugo Weaving', born:1960})
    CREATE (LillyW:Person {name:'Lilly Wachowski', born:1967})
    CREATE (LanaW:Person {name:'Lana Wachowski', born:1965})
    CREATE (JoelS:Person {name:'Joel Silver', born:1952})
    CREATE
    (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix),
    (Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrix),
    (Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrix),
    (Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrix),
    (LillyW)-[:DIRECTED]->(TheMatrix),
    (LanaW)-[:DIRECTED]->(TheMatrix),
    (JoelS)-[:PRODUCED]->(TheMatrix)

    CREATE (Emil:Person {name:"Emil Eifrem", born:1978})
    CREATE (Emil)-[:ACTED_IN {roles:["Emil"]}]->(TheMatrix)

    CREATE (TheMatrixReloaded:Movie {title:'The Matrix Reloaded', released:2003, tagline:'Free your mind'})
    CREATE
    (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrixReloaded),
    (Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrixReloaded),
    (Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrixReloaded),
    (Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrixReloaded),
    (LillyW)-[:DIRECTED]->(TheMatrixReloaded),
    (LanaW)-[:DIRECTED]->(TheMatrixReloaded),
    (JoelS)-[:PRODUCED]->(TheMatrixReloaded)

    CREATE (TheMatrixRevolutions:Movie {title:'The Matrix Revolutions', released:2003, tagline:'Everything that has a beginning has an end'})
    CREATE
    (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrixRevolutions),
    (Carrie)-[:ACTED_IN {roles:['Trinity']}]->(TheMatrixRevolutions),
    (Laurence)-[:ACTED_IN {roles:['Morpheus']}]->(TheMatrixRevolutions),
    (Hugo)-[:ACTED_IN {roles:['Agent Smith']}]->(TheMatrixRevolutions),
    (LillyW)-[:DIRECTED]->(TheMatrixRevolutions),
    (LanaW)-[:DIRECTED]->(TheMatrixRevolutions),
    (JoelS)-[:PRODUCED]->(TheMatrixRevolutions)

    CREATE (TheDevilsAdvocate:Movie {title:"The Devil's Advocate", released:1997, tagline:'Evil has its winning ways'})
    CREATE (Charlize:Person {name:'Charlize Theron', born:1975})
    CREATE (Al:Person {name:'Al Pacino', born:1940})
    CREATE (Taylor:Person {name:'Taylor Hackford', born:1944})
    CREATE
    (Keanu)-[:ACTED_IN {roles:['Kevin Lomax']}]->(TheDevilsAdvocate),
    (Charlize)-[:ACTED_IN {roles:['Mary Ann Lomax']}]->(TheDevilsAdvocate),
    (Al)-[:ACTED_IN {roles:['John Milton']}]->(TheDevilsAdvocate),
    (Taylor)-[:DIRECTED]->(TheDevilsAdvocate)

    CREATE (AFewGoodMen:Movie {title:"A Few Good Men", released:1992, tagline:"In the heart of the nation's capital, in a courthouse of the U.S. government, one man will stop at nothing to keep his honor, and one will stop at nothing to find the truth."})
    CREATE (TomC:Person {name:'Tom Cruise', born:1962})
    CREATE (JackN:Person {name:'Jack Nicholson', born:1937})
    CREATE (DemiM:Person {name:'Demi Moore', born:1962})
    CREATE (KevinB:Person {name:'Kevin Bacon', born:1958})
    CREATE (KieferS:Person {name:'Kiefer Sutherland', born:1966})
    CREATE (NoahW:Person {name:'Noah Wyle', born:1971})
    CREATE (CubaG:Person {name:'Cuba Gooding Jr.', born:1968})
    CREATE (KevinP:Person {name:'Kevin Pollak', born:1957})
    CREATE (JTW:Person {name:'J.T. Walsh', born:1943})
    CREATE (JamesM:Person {name:'James Marshall', born:1967})
    CREATE (ChristopherG:Person {name:'Christopher Guest', born:1948})
    CREATE (RobR:Person {name:'Rob Reiner', born:1947})
    CREATE (AaronS:Person {name:'Aaron Sorkin', born:1961})
    CREATE
    (TomC)-[:ACTED_IN {roles:['Lt. Daniel Kaffee']}]->(AFewGoodMen),
    (JackN)-[:ACTED_IN {roles:['Col. Nathan R. Jessup']}]->(AFewGoodMen),
    (DemiM)-[:ACTED_IN {roles:['Lt. Cdr. JoAnne Galloway']}]->(AFewGoodMen),
    (KevinB)-[:ACTED_IN {roles:['Capt. Jack Ross']}]->(AFewGoodMen),
    (KieferS)-[:ACTED_IN {roles:['Lt. Jonathan Kendrick']}]->(AFewGoodMen),
    (NoahW)-[:ACTED_IN {roles:['Cpl. Jeffrey Barnes']}]->(AFewGoodMen),
    (CubaG)-[:ACTED_IN {roles:['Cpl. Carl Hammaker']}]->(AFewGoodMen),
    (KevinP)-[:ACTED_IN {roles:['Lt. Sam Weinberg']}]->(AFewGoodMen),
    (JTW)-[:ACTED_IN {roles:['Lt. Col. Matthew Andrew Markinson']}]->(AFewGoodMen),
    (JamesM)-[:ACTED_IN {roles:['Pfc. Louden Downey']}]->(AFewGoodMen),
    (ChristopherG)-[:ACTED_IN {roles:['Dr. Stone']}]->(AFewGoodMen),
    (AaronS)-[:ACTED_IN {roles:['Man in Bar']}]->(AFewGoodMen),
    (RobR)-[:DIRECTED]->(AFewGoodMen),
    (AaronS)-[:WROTE]->(AFewGoodMen)

    CREATE (TopGun:Movie {title:"Top Gun", released:1986, tagline:'I feel the need, the need for speed.'})
    CREATE (KellyM:Person {name:'Kelly McGillis', born:1957})
    CREATE (ValK:Person {name:'Val Kilmer', born:1959})
    CREATE (AnthonyE:Person {name:'Anthony Edwards', born:1962})
    CREATE (TomS:Person {name:'Tom Skerritt', born:1933})
    CREATE (MegR:Person {name:'Meg Ryan', born:1961})
    CREATE (TonyS:Person {name:'Tony Scott', born:1944})
    CREATE (JimC:Person {name:'Jim Cash', born:1941})
    CREATE
    (TomC)-[:ACTED_IN {roles:['Maverick']}]->(TopGun),
    (KellyM)-[:ACTED_IN {roles:['Charlie']}]->(TopGun),
    (ValK)-[:ACTED_IN {roles:['Iceman']}]->(TopGun),
    (AnthonyE)-[:ACTED_IN {roles:['Goose']}]->(TopGun),
    (TomS)-[:ACTED_IN {roles:['Viper']}]->(TopGun),
    (MegR)-[:ACTED_IN {roles:['Carole']}]->(TopGun),
    (TonyS)-[:DIRECTED]->(TopGun),
    (JimC)-[:WROTE]->(TopGun)

    CREATE (JerryMaguire:Movie {title:'Jerry Maguire', released:2000, tagline:'The rest of his life begins now.'})
    CREATE (ReneeZ:Person {name:'Renee Zellweger', born:1969})
    CREATE (KellyP:Person {name:'Kelly Preston', born:1962})
    CREATE (JerryO:Person {name:"Jerry O'Connell", born:1974})
    CREATE (JayM:Person {name:'Jay Mohr', born:1970})
    CREATE (BonnieH:Person {name:'Bonnie Hunt', born:1961})
    CREATE (ReginaK:Person {name:'Regina King', born:1971})
    CREATE (JonathanL:Person {name:'Jonathan Lipnicki', born:1996})
    CREATE (CameronC:Person {name:'Cameron Crowe', born:1957})
    CREATE
    (TomC)-[:ACTED_IN {roles:['Jerry Maguire']}]->(JerryMaguire),
    (CubaG)-[:ACTED_IN {roles:['Rod Tidwell']}]->(JerryMaguire),
    (ReneeZ)-[:ACTED_IN {roles:['Dorothy Boyd']}]->(JerryMaguire),
    (KellyP)-[:ACTED_IN {roles:['Avery Bishop']}]->(JerryMaguire),
    (JerryO)-[:ACTED_IN {roles:['Frank Cushman']}]->(JerryMaguire),
    (JayM)-[:ACTED_IN {roles:['Bob Sugar']}]->(JerryMaguire),
    (BonnieH)-[:ACTED_IN {roles:['Laurel Boyd']}]->(JerryMaguire),
    (ReginaK)-[:ACTED_IN {roles:['Marcee Tidwell']}]->(JerryMaguire),
    (JonathanL)-[:ACTED_IN {roles:['Ray Boyd']}]->(JerryMaguire),
    (CameronC)-[:DIRECTED]->(JerryMaguire),
    (CameronC)-[:PRODUCED]->(JerryMaguire),
    (CameronC)-[:WROTE]->(JerryMaguire)

    CREATE (StandByMe:Movie {title:"Stand By Me", released:1986, tagline:"For some, it's the last real taste of innocence, and the first real taste of life. But for everyone, it's the time that memories are made of."})
    CREATE (RiverP:Person {name:'River Phoenix', born:1970})
    CREATE (CoreyF:Person {name:'Corey Feldman', born:1971})
    CREATE (WilW:Person {name:'Wil Wheaton', born:1972})
    CREATE (JohnC:Person {name:'John Cusack', born:1966})
    CREATE (MarshallB:Person {name:'Marshall Bell', born:1942})
    CREATE
    (WilW)-[:ACTED_IN {roles:['Gordie Lachance']}]->(StandByMe),
    (RiverP)-[:ACTED_IN {roles:['Chris Chambers']}]->(StandByMe),
    (JerryO)-[:ACTED_IN {roles:['Vern Tessio']}]->(StandByMe),
    (CoreyF)-[:ACTED_IN {roles:['Teddy Duchamp']}]->(StandByMe),
    (JohnC)-[:ACTED_IN {roles:['Denny Lachance']}]->(StandByMe),
    (KieferS)-[:ACTED_IN {roles:['Ace Merrill']}]->(StandByMe),
    (MarshallB)-[:ACTED_IN {roles:['Mr. Lachance']}]->(StandByMe),
    (RobR)-[:DIRECTED]->(StandByMe)

    CREATE (AsGoodAsItGets:Movie {title:'As Good as It Gets', released:1997, tagline:'A comedy from the heart that goes for the throat.'})
    CREATE (HelenH:Person {name:'Helen Hunt', born:1963})
    CREATE (GregK:Person {name:'Greg Kinnear', born:1963})
    CREATE (JamesB:Person {name:'James L. Brooks', born:1940})
    CREATE
    (JackN)-[:ACTED_IN {roles:['Melvin Udall']}]->(AsGoodAsItGets),
    (HelenH)-[:ACTED_IN {roles:['Carol Connelly']}]->(AsGoodAsItGets),
    (GregK)-[:ACTED_IN {roles:['Simon Bishop']}]->(AsGoodAsItGets),
    (CubaG)-[:ACTED_IN {roles:['Frank Sachs']}]->(AsGoodAsItGets),
    (JamesB)-[:DIRECTED]->(AsGoodAsItGets)

    CREATE (WhatDreamsMayCome:Movie {title:'What Dreams May Come', released:1998, tagline:'After life there is more. The end is just the beginning.'})
    CREATE (AnnabellaS:Person {name:'Annabella Sciorra', born:1960})
    CREATE (MaxS:Person {name:'Max von Sydow', born:1929})
    CREATE (WernerH:Person {name:'Werner Herzog', born:1942})
    CREATE (Robin:Person {name:'Robin Williams', born:1951})
    CREATE (VincentW:Person {name:'Vincent Ward', born:1956})
    CREATE
    (Robin)-[:ACTED_IN {roles:['Chris Nielsen']}]->(WhatDreamsMayCome),
    (CubaG)-[:ACTED_IN {roles:['Albert Lewis']}]->(WhatDreamsMayCome),
    (AnnabellaS)-[:ACTED_IN {roles:['Annie Collins-Nielsen']}]->(WhatDreamsMayCome),
    (MaxS)-[:ACTED_IN {roles:['The Tracker']}]->(WhatDreamsMayCome),
    (WernerH)-[:ACTED_IN {roles:['The Face']}]->(WhatDreamsMayCome),
    (VincentW)-[:DIRECTED]->(WhatDreamsMayCome)

    CREATE (SnowFallingonCedars:Movie {title:'Snow Falling on Cedars', released:1999, tagline:'First loves last. Forever.'})
    CREATE (EthanH:Person {name:'Ethan Hawke', born:1970})
    CREATE (RickY:Person {name:'Rick Yune', born:1971})
    CREATE (JamesC:Person {name:'James Cromwell', born:1940})
    CREATE (ScottH:Person {name:'Scott Hicks', born:1953})
    CREATE
    (EthanH)-[:ACTED_IN {roles:['Ishmael Chambers']}]->(SnowFallingonCedars),
    (RickY)-[:ACTED_IN {roles:['Kazuo Miyamoto']}]->(SnowFallingonCedars),
    (MaxS)-[:ACTED_IN {roles:['Nels Gudmundsson']}]->(SnowFallingonCedars),
    (JamesC)-[:ACTED_IN {roles:['Judge Fielding']}]->(SnowFallingonCedars),
    (ScottH)-[:DIRECTED]->(SnowFallingonCedars)

    CREATE (YouveGotMail:Movie {title:"You've Got Mail", released:1998, tagline:'At odds in life... in love on-line.'})
    CREATE (ParkerP:Person {name:'Parker Posey', born:1968})
    CREATE (DaveC:Person {name:'Dave Chappelle', born:1973})
    CREATE (SteveZ:Person {name:'Steve Zahn', born:1967})
    CREATE (TomH:Person {name:'Tom Hanks', born:1956})
    CREATE (NoraE:Person {name:'Nora Ephron', born:1941})
    CREATE
    (TomH)-[:ACTED_IN {roles:['Joe Fox']}]->(YouveGotMail),
    (MegR)-[:ACTED_IN {roles:['Kathleen Kelly']}]->(YouveGotMail),
    (GregK)-[:ACTED_IN {roles:['Frank Navasky']}]->(YouveGotMail),
    (ParkerP)-[:ACTED_IN {roles:['Patricia Eden']}]->(YouveGotMail),
    (DaveC)-[:ACTED_IN {roles:['Kevin Jackson']}]->(YouveGotMail),
    (SteveZ)-[:ACTED_IN {roles:['George Pappas']}]->(YouveGotMail),
    (NoraE)-[:DIRECTED]->(YouveGotMail)

    CREATE (SleeplessInSeattle:Movie {title:'Sleepless in Seattle', released:1993, tagline:'What if someone you never met, someone you never saw, someone you never knew was the only someone for you?'})
    CREATE (RitaW:Person {name:'Rita Wilson', born:1956})
    CREATE (BillPull:Person {name:'Bill Pullman', born:1953})
    CREATE (VictorG:Person {name:'Victor Garber', born:1949})
    CREATE (RosieO:Person {name:"Rosie O'Donnell", born:1962})
    CREATE
    (TomH)-[:ACTED_IN {roles:['Sam Baldwin']}]->(SleeplessInSeattle),
    (MegR)-[:ACTED_IN {roles:['Annie Reed']}]->(SleeplessInSeattle),
    (RitaW)-[:ACTED_IN {roles:['Suzy']}]->(SleeplessInSeattle),
    (BillPull)-[:ACTED_IN {roles:['Walter']}]->(SleeplessInSeattle),
    (VictorG)-[:ACTED_IN {roles:['Greg']}]->(SleeplessInSeattle),
    (RosieO)-[:ACTED_IN {roles:['Becky']}]->(SleeplessInSeattle),
    (NoraE)-[:DIRECTED]->(SleeplessInSeattle)

    CREATE (JoeVersustheVolcano:Movie {title:'Joe Versus the Volcano', released:1990, tagline:'A story of love, lava and burning desire.'})
    CREATE (JohnS:Person {name:'John Patrick Stanley', born:1950})
    CREATE (Nathan:Person {name:'Nathan Lane', born:1956})
    CREATE
    (TomH)-[:ACTED_IN {roles:['Joe Banks']}]->(JoeVersustheVolcano),
    (MegR)-[:ACTED_IN {roles:['DeDe', 'Angelica Graynamore', 'Patricia Graynamore']}]->(JoeVersustheVolcano),
    (Nathan)-[:ACTED_IN {roles:['Baw']}]->(JoeVersustheVolcano),
    (JohnS)-[:DIRECTED]->(JoeVersustheVolcano)

    CREATE (WhenHarryMetSally:Movie {title:'When Harry Met Sally', released:1998, tagline:'Can two friends sleep together and still love each other in the morning?'})
    CREATE (BillyC:Person {name:'Billy Crystal', born:1948})
    CREATE (CarrieF:Person {name:'Carrie Fisher', born:1956})
    CREATE (BrunoK:Person {name:'Bruno Kirby', born:1949})
    CREATE
    (BillyC)-[:ACTED_IN {roles:['Harry Burns']}]->(WhenHarryMetSally),
    (MegR)-[:ACTED_IN {roles:['Sally Albright']}]->(WhenHarryMetSally),
    (CarrieF)-[:ACTED_IN {roles:['Marie']}]->(WhenHarryMetSally),
    (BrunoK)-[:ACTED_IN {roles:['Jess']}]->(WhenHarryMetSally),
    (RobR)-[:DIRECTED]->(WhenHarryMetSally),
    (RobR)-[:PRODUCED]->(WhenHarryMetSally),
    (NoraE)-[:PRODUCED]->(WhenHarryMetSally),
    (NoraE)-[:WROTE]->(WhenHarryMetSally)

    CREATE (ThatThingYouDo:Movie {title:'That Thing You Do', released:1996, tagline:'In every life there comes a time when that thing you dream becomes that thing you do'})
    CREATE (LivT:Person {name:'Liv Tyler', born:1977})
    CREATE
    (TomH)-[:ACTED_IN {roles:['Mr. White']}]->(ThatThingYouDo),
    (LivT)-[:ACTED_IN {roles:['Faye Dolan']}]->(ThatThingYouDo),
    (Charlize)-[:ACTED_IN {roles:['Tina']}]->(ThatThingYouDo),
    (TomH)-[:DIRECTED]->(ThatThingYouDo)

    CREATE (TheReplacements:Movie {title:'The Replacements', released:2000, tagline:'Pain heals, Chicks dig scars... Glory lasts forever'})
    CREATE (Brooke:Person {name:'Brooke Langton', born:1970})
    CREATE (Gene:Person {name:'Gene Hackman', born:1930})
    CREATE (Orlando:Person {name:'Orlando Jones', born:1968})
    CREATE (Howard:Person {name:'Howard Deutch', born:1950})
    CREATE
    (Keanu)-[:ACTED_IN {roles:['Shane Falco']}]->(TheReplacements),
    (Brooke)-[:ACTED_IN {roles:['Annabelle Farrell']}]->(TheReplacements),
    (Gene)-[:ACTED_IN {roles:['Jimmy McGinty']}]->(TheReplacements),
    (Orlando)-[:ACTED_IN {roles:['Clifford Franklin']}]->(TheReplacements),
    (Howard)-[:DIRECTED]->(TheReplacements)

    CREATE (RescueDawn:Movie {title:'RescueDawn', released:2006, tagline:"Based on the extraordinary true story of one man's fight for freedom"})
    CREATE (ChristianB:Person {name:'Christian Bale', born:1974})
    CREATE (ZachG:Person {name:'Zach Grenier', born:1954})
    CREATE
    (MarshallB)-[:ACTED_IN {roles:['Admiral']}]->(RescueDawn),
    (ChristianB)-[:ACTED_IN {roles:['Dieter Dengler']}]->(RescueDawn),
    (ZachG)-[:ACTED_IN {roles:['Squad Leader']}]->(RescueDawn),
    (SteveZ)-[:ACTED_IN {roles:['Duane']}]->(RescueDawn),
    (WernerH)-[:DIRECTED]->(RescueDawn)

    CREATE (TheBirdcage:Movie {title:'The Birdcage', released:1996, tagline:'Come as you are'})
    CREATE (MikeN:Person {name:'Mike Nichols', born:1931})
    CREATE
    (Robin)-[:ACTED_IN {roles:['Armand Goldman']}]->(TheBirdcage),
    (Nathan)-[:ACTED_IN {roles:['Albert Goldman']}]->(TheBirdcage),
    (Gene)-[:ACTED_IN {roles:['Sen. Kevin Keeley']}]->(TheBirdcage),
    (MikeN)-[:DIRECTED]->(TheBirdcage)

    CREATE (Unforgiven:Movie {title:'Unforgiven', released:1992, tagline:"It's a hell of a thing, killing a man"})
    CREATE (RichardH:Person {name:'Richard Harris', born:1930})
    CREATE (ClintE:Person {name:'Clint Eastwood', born:1930})
    CREATE
    (RichardH)-[:ACTED_IN {roles:['English Bob']}]->(Unforgiven),
    (ClintE)-[:ACTED_IN {roles:['Bill Munny']}]->(Unforgiven),
    (Gene)-[:ACTED_IN {roles:['Little Bill Daggett']}]->(Unforgiven),
    (ClintE)-[:DIRECTED]->(Unforgiven)

    CREATE (JohnnyMnemonic:Movie {title:'Johnny Mnemonic', released:1995, tagline:'The hottest data on earth. In the coolest head in town'})
    CREATE (Takeshi:Person {name:'Takeshi Kitano', born:1947})
    CREATE (Dina:Person {name:'Dina Meyer', born:1968})
    CREATE (IceT:Person {name:'Ice-T', born:1958})
    CREATE (RobertL:Person {name:'Robert Longo', born:1953})
    CREATE
    (Keanu)-[:ACTED_IN {roles:['Johnny Mnemonic']}]->(JohnnyMnemonic),
    (Takeshi)-[:ACTED_IN {roles:['Takahashi']}]->(JohnnyMnemonic),
    (Dina)-[:ACTED_IN {roles:['Jane']}]->(JohnnyMnemonic),
    (IceT)-[:ACTED_IN {roles:['J-Bone']}]->(JohnnyMnemonic),
    (RobertL)-[:DIRECTED]->(JohnnyMnemonic)

    CREATE (CloudAtlas:Movie {title:'Cloud Atlas', released:2012, tagline:'Everything is connected'})
    CREATE (HalleB:Person {name:'Halle Berry', born:1966})
    CREATE (JimB:Person {name:'Jim Broadbent', born:1949})
    CREATE (TomT:Person {name:'Tom Tykwer', born:1965})
    CREATE (DavidMitchell:Person {name:'David Mitchell', born:1969})
    CREATE (StefanArndt:Person {name:'Stefan Arndt', born:1961})
    CREATE
    (TomH)-[:ACTED_IN {roles:['Zachry', 'Dr. Henry Goose', 'Isaac Sachs', 'Dermot Hoggins']}]->(CloudAtlas),
    (Hugo)-[:ACTED_IN {roles:['Bill Smoke', 'Haskell Moore', 'Tadeusz Kesselring', 'Nurse Noakes', 'Boardman Mephi', 'Old Georgie']}]->(CloudAtlas),
    (HalleB)-[:ACTED_IN {roles:['Luisa Rey', 'Jocasta Ayrs', 'Ovid', 'Meronym']}]->(CloudAtlas),
    (JimB)-[:ACTED_IN {roles:['Vyvyan Ayrs', 'Captain Molyneux', 'Timothy Cavendish']}]->(CloudAtlas),
    (TomT)-[:DIRECTED]->(CloudAtlas),
    (LillyW)-[:DIRECTED]->(CloudAtlas),
    (LanaW)-[:DIRECTED]->(CloudAtlas),
    (DavidMitchell)-[:WROTE]->(CloudAtlas),
    (StefanArndt)-[:PRODUCED]->(CloudAtlas)

    CREATE (TheDaVinciCode:Movie {title:'The Da Vinci Code', released:2006, tagline:'Break The Codes'})
    CREATE (IanM:Person {name:'Ian McKellen', born:1939})
    CREATE (AudreyT:Person {name:'Audrey Tautou', born:1976})
    CREATE (PaulB:Person {name:'Paul Bettany', born:1971})
    CREATE (RonH:Person {name:'Ron Howard', born:1954})
    CREATE
    (TomH)-[:ACTED_IN {roles:['Dr. Robert Langdon']}]->(TheDaVinciCode),
    (IanM)-[:ACTED_IN {roles:['Sir Leight Teabing']}]->(TheDaVinciCode),
    (AudreyT)-[:ACTED_IN {roles:['Sophie Neveu']}]->(TheDaVinciCode),
    (PaulB)-[:ACTED_IN {roles:['Silas']}]->(TheDaVinciCode),
    (RonH)-[:DIRECTED]->(TheDaVinciCode)

    CREATE (VforVendetta:Movie {title:'V for Vendetta', released:2006, tagline:'Freedom! Forever!'})
    CREATE (NatalieP:Person {name:'Natalie Portman', born:1981})
    CREATE (StephenR:Person {name:'Stephen Rea', born:1946})
    CREATE (JohnH:Person {name:'John Hurt', born:1940})
    CREATE (BenM:Person {name: 'Ben Miles', born:1967})
    CREATE
    (Hugo)-[:ACTED_IN {roles:['V']}]->(VforVendetta),
    (NatalieP)-[:ACTED_IN {roles:['Evey Hammond']}]->(VforVendetta),
    (StephenR)-[:ACTED_IN {roles:['Eric Finch']}]->(VforVendetta),
    (JohnH)-[:ACTED_IN {roles:['High Chancellor Adam Sutler']}]->(VforVendetta),
    (BenM)-[:ACTED_IN {roles:['Dascomb']}]->(VforVendetta),
    (JamesM)-[:DIRECTED]->(VforVendetta),
    (LillyW)-[:PRODUCED]->(VforVendetta),
    (LanaW)-[:PRODUCED]->(VforVendetta),
    (JoelS)-[:PRODUCED]->(VforVendetta),
    (LillyW)-[:WROTE]->(VforVendetta),
    (LanaW)-[:WROTE]->(VforVendetta)

    CREATE (SpeedRacer:Movie {title:'Speed Racer', released:2008, tagline:'Speed has no limits'})
    CREATE (EmileH:Person {name:'Emile Hirsch', born:1985})
    CREATE (JohnG:Person {name:'John Goodman', born:1960})
    CREATE (SusanS:Person {name:'Susan Sarandon', born:1946})
    CREATE (MatthewF:Person {name:'Matthew Fox', born:1966})
    CREATE (ChristinaR:Person {name:'Christina Ricci', born:1980})
    CREATE (Rain:Person {name:'Rain', born:1982})
    CREATE
    (EmileH)-[:ACTED_IN {roles:['Speed Racer']}]->(SpeedRacer),
    (JohnG)-[:ACTED_IN {roles:['Pops']}]->(SpeedRacer),
    (SusanS)-[:ACTED_IN {roles:['Mom']}]->(SpeedRacer),
    (MatthewF)-[:ACTED_IN {roles:['Racer X']}]->(SpeedRacer),
    (ChristinaR)-[:ACTED_IN {roles:['Trixie']}]->(SpeedRacer),
    (Rain)-[:ACTED_IN {roles:['Taejo Togokahn']}]->(SpeedRacer),
    (BenM)-[:ACTED_IN {roles:['Cass Jones']}]->(SpeedRacer),
    (LillyW)-[:DIRECTED]->(SpeedRacer),
    (LanaW)-[:DIRECTED]->(SpeedRacer),
    (LillyW)-[:WROTE]->(SpeedRacer),
    (LanaW)-[:WROTE]->(SpeedRacer),
    (JoelS)-[:PRODUCED]->(SpeedRacer)

    CREATE (NinjaAssassin:Movie {title:'Ninja Assassin', released:2009, tagline:'Prepare to enter a secret world of assassins'})
    CREATE (NaomieH:Person {name:'Naomie Harris'})
    CREATE
    (Rain)-[:ACTED_IN {roles:['Raizo']}]->(NinjaAssassin),
    (NaomieH)-[:ACTED_IN {roles:['Mika Coretti']}]->(NinjaAssassin),
    (RickY)-[:ACTED_IN {roles:['Takeshi']}]->(NinjaAssassin),
    (BenM)-[:ACTED_IN {roles:['Ryan Maslow']}]->(NinjaAssassin),
    (JamesM)-[:DIRECTED]->(NinjaAssassin),
    (LillyW)-[:PRODUCED]->(NinjaAssassin),
    (LanaW)-[:PRODUCED]->(NinjaAssassin),
    (JoelS)-[:PRODUCED]->(NinjaAssassin)

    CREATE (TheGreenMile:Movie {title:'The Green Mile', released:1999, tagline:"Walk a mile you'll never forget."})
    CREATE (MichaelD:Person {name:'Michael Clarke Duncan', born:1957})
    CREATE (DavidM:Person {name:'David Morse', born:1953})
    CREATE (SamR:Person {name:'Sam Rockwell', born:1968})
    CREATE (GaryS:Person {name:'Gary Sinise', born:1955})
    CREATE (PatriciaC:Person {name:'Patricia Clarkson', born:1959})
    CREATE (FrankD:Person {name:'Frank Darabont', born:1959})
    CREATE
    (TomH)-[:ACTED_IN {roles:['Paul Edgecomb']}]->(TheGreenMile),
    (MichaelD)-[:ACTED_IN {roles:['John Coffey']}]->(TheGreenMile),
    (DavidM)-[:ACTED_IN {roles:['Brutus "Brutal" Howell']}]->(TheGreenMile),
    (BonnieH)-[:ACTED_IN {roles:['Jan Edgecomb']}]->(TheGreenMile),
    (JamesC)-[:ACTED_IN {roles:['Warden Hal Moores']}]->(TheGreenMile),
    (SamR)-[:ACTED_IN {roles:['"Wild Bill" Wharton']}]->(TheGreenMile),
    (GaryS)-[:ACTED_IN {roles:['Burt Hammersmith']}]->(TheGreenMile),
    (PatriciaC)-[:ACTED_IN {roles:['Melinda Moores']}]->(TheGreenMile),
    (FrankD)-[:DIRECTED]->(TheGreenMile)

    CREATE (FrostNixon:Movie {title:'Frost/Nixon', released:2008, tagline:'400 million people were waiting for the truth.'})
    CREATE (FrankL:Person {name:'Frank Langella', born:1938})
    CREATE (MichaelS:Person {name:'Michael Sheen', born:1969})
    CREATE (OliverP:Person {name:'Oliver Platt', born:1960})
    CREATE
    (FrankL)-[:ACTED_IN {roles:['Richard Nixon']}]->(FrostNixon),
    (MichaelS)-[:ACTED_IN {roles:['David Frost']}]->(FrostNixon),
    (KevinB)-[:ACTED_IN {roles:['Jack Brennan']}]->(FrostNixon),
    (OliverP)-[:ACTED_IN {roles:['Bob Zelnick']}]->(FrostNixon),
    (SamR)-[:ACTED_IN {roles:['James Reston, Jr.']}]->(FrostNixon),
    (RonH)-[:DIRECTED]->(FrostNixon)

    CREATE (Hoffa:Movie {title:'Hoffa', released:1992, tagline:"He didn't want law. He wanted justice."})
    CREATE (DannyD:Person {name:'Danny DeVito', born:1944})
    CREATE (JohnR:Person {name:'John C. Reilly', born:1965})
    CREATE
    (JackN)-[:ACTED_IN {roles:['Hoffa']}]->(Hoffa),
    (DannyD)-[:ACTED_IN {roles:['Robert "Bobby" Ciaro']}]->(Hoffa),
    (JTW)-[:ACTED_IN {roles:['Frank Fitzsimmons']}]->(Hoffa),
    (JohnR)-[:ACTED_IN {roles:['Peter "Pete" Connelly']}]->(Hoffa),
    (DannyD)-[:DIRECTED]->(Hoffa)

    CREATE (Apollo13:Movie {title:'Apollo 13', released:1995, tagline:'Houston, we have a problem.'})
    CREATE (EdH:Person {name:'Ed Harris', born:1950})
    CREATE (BillPax:Person {name:'Bill Paxton', born:1955})
    CREATE
    (TomH)-[:ACTED_IN {roles:['Jim Lovell']}]->(Apollo13),
    (KevinB)-[:ACTED_IN {roles:['Jack Swigert']}]->(Apollo13),
    (EdH)-[:ACTED_IN {roles:['Gene Kranz']}]->(Apollo13),
    (BillPax)-[:ACTED_IN {roles:['Fred Haise']}]->(Apollo13),
    (GaryS)-[:ACTED_IN {roles:['Ken Mattingly']}]->(Apollo13),
    (RonH)-[:DIRECTED]->(Apollo13)

    CREATE (Twister:Movie {title:'Twister', released:1996, tagline:"Don't Breathe. Don't Look Back."})
    CREATE (PhilipH:Person {name:'Philip Seymour Hoffman', born:1967})
    CREATE (JanB:Person {name:'Jan de Bont', born:1943})
    CREATE
    (BillPax)-[:ACTED_IN {roles:['Bill Harding']}]->(Twister),
    (HelenH)-[:ACTED_IN {roles:['Dr. Jo Harding']}]->(Twister),
    (ZachG)-[:ACTED_IN {roles:['Eddie']}]->(Twister),
    (PhilipH)-[:ACTED_IN {roles:['Dustin "Dusty" Davis']}]->(Twister),
    (JanB)-[:DIRECTED]->(Twister)

    CREATE (CastAway:Movie {title:'Cast Away', released:2000, tagline:'At the edge of the world, his journey begins.'})
    CREATE (RobertZ:Person {name:'Robert Zemeckis', born:1951})
    CREATE
    (TomH)-[:ACTED_IN {roles:['Chuck Noland']}]->(CastAway),
    (HelenH)-[:ACTED_IN {roles:['Kelly Frears']}]->(CastAway),
    (RobertZ)-[:DIRECTED]->(CastAway)

    CREATE (OneFlewOvertheCuckoosNest:Movie {title:"One Flew Over the Cuckoo's Nest", released:1975, tagline:"If he's crazy, what does that make you?"})
    CREATE (MilosF:Person {name:'Milos Forman', born:1932})
    CREATE
    (JackN)-[:ACTED_IN {roles:['Randle McMurphy']}]->(OneFlewOvertheCuckoosNest),
    (DannyD)-[:ACTED_IN {roles:['Martini']}]->(OneFlewOvertheCuckoosNest),
    (MilosF)-[:DIRECTED]->(OneFlewOvertheCuckoosNest)

    CREATE (SomethingsGottaGive:Movie {title:"Something's Gotta Give", released:2003})
    CREATE (DianeK:Person {name:'Diane Keaton', born:1946})
    CREATE (NancyM:Person {name:'Nancy Meyers', born:1949})
    CREATE
    (JackN)-[:ACTED_IN {roles:['Harry Sanborn']}]->(SomethingsGottaGive),
    (DianeK)-[:ACTED_IN {roles:['Erica Barry']}]->(SomethingsGottaGive),
    (Keanu)-[:ACTED_IN {roles:['Julian Mercer']}]->(SomethingsGottaGive),
    (NancyM)-[:DIRECTED]->(SomethingsGottaGive),
    (NancyM)-[:PRODUCED]->(SomethingsGottaGive),
    (NancyM)-[:WROTE]->(SomethingsGottaGive)

    CREATE (BicentennialMan:Movie {title:'Bicentennial Man', released:1999, tagline:"One robot's 200 year journey to become an ordinary man."})
    CREATE (ChrisC:Person {name:'Chris Columbus', born:1958})
    CREATE
    (Robin)-[:ACTED_IN {roles:['Andrew Marin']}]->(BicentennialMan),
    (OliverP)-[:ACTED_IN {roles:['Rupert Burns']}]->(BicentennialMan),
    (ChrisC)-[:DIRECTED]->(BicentennialMan)

    CREATE (CharlieWilsonsWar:Movie {title:"Charlie Wilson's War", released:2007, tagline:"A stiff drink. A little mascara. A lot of nerve. Who said they couldn't bring down the Soviet empire."})
    CREATE (JuliaR:Person {name:'Julia Roberts', born:1967})
    CREATE
    (TomH)-[:ACTED_IN {roles:['Rep. Charlie Wilson']}]->(CharlieWilsonsWar),
    (JuliaR)-[:ACTED_IN {roles:['Joanne Herring']}]->(CharlieWilsonsWar),
    (PhilipH)-[:ACTED_IN {roles:['Gust Avrakotos']}]->(CharlieWilsonsWar),
    (MikeN)-[:DIRECTED]->(CharlieWilsonsWar)

    CREATE (ThePolarExpress:Movie {title:'The Polar Express', released:2004, tagline:'This Holiday Season... Believe'})
    CREATE
    (TomH)-[:ACTED_IN {roles:['Hero Boy', 'Father', 'Conductor', 'Hobo', 'Scrooge', 'Santa Claus']}]->(ThePolarExpress),
    (RobertZ)-[:DIRECTED]->(ThePolarExpress)

    CREATE (ALeagueofTheirOwn:Movie {title:'A League of Their Own', released:1992, tagline:'Once in a lifetime you get a chance to do something different.'})
    CREATE (Madonna:Person {name:'Madonna', born:1954})
    CREATE (GeenaD:Person {name:'Geena Davis', born:1956})
    CREATE (LoriP:Person {name:'Lori Petty', born:1963})
    CREATE (PennyM:Person {name:'Penny Marshall', born:1943})
    CREATE
    (TomH)-[:ACTED_IN {roles:['Jimmy Dugan']}]->(ALeagueofTheirOwn),
    (GeenaD)-[:ACTED_IN {roles:['Dottie Hinson']}]->(ALeagueofTheirOwn),
    (LoriP)-[:ACTED_IN {roles:['Kit Keller']}]->(ALeagueofTheirOwn),
    (RosieO)-[:ACTED_IN {roles:['Doris Murphy']}]->(ALeagueofTheirOwn),
    (Madonna)-[:ACTED_IN {roles:['"All the Way" Mae Mordabito']}]->(ALeagueofTheirOwn),
    (BillPax)-[:ACTED_IN {roles:['Bob Hinson']}]->(ALeagueofTheirOwn),
    (PennyM)-[:DIRECTED]->(ALeagueofTheirOwn)

    CREATE (PaulBlythe:Person {name:'Paul Blythe'})
    CREATE (AngelaScope:Person {name:'Angela Scope'})
    CREATE (JessicaThompson:Person {name:'Jessica Thompson'})
    CREATE (JamesThompson:Person {name:'James Thompson'})

    CREATE
    (JamesThompson)-[:FOLLOWS]->(JessicaThompson),
    (AngelaScope)-[:FOLLOWS]->(JessicaThompson),
    (PaulBlythe)-[:FOLLOWS]->(AngelaScope)

    CREATE
    (JessicaThompson)-[:REVIEWED {summary:'An amazing journey', rating:95}]->(CloudAtlas),
    (JessicaThompson)-[:REVIEWED {summary:'Silly, but fun', rating:65}]->(TheReplacements),
    (JamesThompson)-[:REVIEWED {summary:'The coolest football movie ever', rating:100}]->(TheReplacements),
    (AngelaScope)-[:REVIEWED {summary:'Pretty funny at times', rating:62}]->(TheReplacements),
    (JessicaThompson)-[:REVIEWED {summary:'Dark, but compelling', rating:85}]->(Unforgiven),
    (JessicaThompson)-[:REVIEWED {summary:"Slapstick redeemed only by the Robin Williams and Gene Hackman's stellar performances", rating:45}]->(TheBirdcage),
    (JessicaThompson)-[:REVIEWED {summary:'A solid romp', rating:68}]->(TheDaVinciCode),
    (JamesThompson)-[:REVIEWED {summary:'Fun, but a little far fetched', rating:65}]->(TheDaVinciCode),
    (JessicaThompson)-[:REVIEWED {summary:'You had me at Jerry', rating:92}]->(JerryMaguire)

    WITH TomH as a
    MATCH (a)-[:ACTED_IN]->(m)<-[:DIRECTED]-(d) RETURN a,m,d LIMIT 10;

    执行成功后,可以看到数据如下图所示

    5.2 查询示例

    5.2.1 找到名为“Tom Hanks”的演员。

    1
    MATCH (tom {name: "Tom Hanks"}) RETURN tom

    结果如下:

    查询标题为“Cloud Atlas”的电影

    5.2.2 查询10个用户

    1
    MATCH (people:Person) RETURN people.name LIMIT 10

    5.2.3 查找20世纪90年代发行的电影

    1
    MATCH (nineties:Movie) WHERE nineties.released >= 1990 AND nineties.released < 2000 RETURN nineties.title

    5.2.4 列出所有 Tom Hanks 的电影

    1
    MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(tomHanksMovies) RETURN tom,tomHanksMovies

    5.2.5 查询出谁导演了Cloud Atlas

    1
    MATCH (cloudAtlas {title: "Cloud Atlas"})<-[:DIRECTED]-(directors) RETURN directors.name

    5.2.6 查询出 Tom Hanks 的搭档

    1
    MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors) RETURN coActors.name

    5.2.7 查询出哪些人与Cloud Atlas有关系

    1
    MATCH (people:Person)-[relatedTo]-(:Movie {title: "Cloud Atlas"}) RETURN people.name, Type(relatedTo), relatedTo

    5.2.8 电影和演员距离Kevin Bacon最多4个“跳跃”

    1
    2
    MATCH (bacon:Person {name:"Kevin Bacon"})-[*1..4]-(hollywood)
    RETURN DISTINCT hollywood

    5.2.9 培根路径,与Meg Ryan的任何关系中最短的路径

    1
    2
    3
    4
    MATCH p=shortestPath(
    (bacon:Person {name:"Kevin Bacon"})-[*]-(meg:Person {name:"Meg Ryan"})
    )
    RETURN p

    5.2.10 扩展Tom Hanks的合作演员,以找到没有与Tom Hanks合作过的合作演员

    1
    2
    3
    4
    MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
    (coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cocoActors)
    WHERE NOT (tom)-[:ACTED_IN]->()<-[:ACTED_IN]-(cocoActors) AND tom <> cocoActors
    RETURN cocoActors.name AS Recommended, count(*) AS Strength ORDER BY Strength DESC

    5.2.11 找个人把Tom Hanks介绍给Tom Cruise

    1
    2
    3
    MATCH (tom:Person {name:"Tom Hanks"})-[:ACTED_IN]->(m)<-[:ACTED_IN]-(coActors),
    (coActors)-[:ACTED_IN]->(m2)<-[:ACTED_IN]-(cruise:Person {name:"Tom Cruise"})
    RETURN tom, m, coActors, m2, cruise

    5.2.13 查询管理属性为Andrew Marin的记录

    查询命令如下

    1
    MATCH (n1)-[r{roles:['Andrew Marin']}]->(n2) RETURN r, n1, n2 LIMIT 25

    5.2.14 查询有一个关系角色为Conductor的记录

    命令如下

    1
    MATCH (n1)-[r]->(n2) where "Conductor" in r.roles RETURN r, n1, n2

    查询结果如下

    5.3 删除数据

    删除所有电影和人物节点及其关系

    1
    MATCH (n) DETACH DELETE n

    六 数据概况

    6.1 统计全部节点数量

    1
    2
    3
    // Count all nodes
    MATCH (n)
    RETURN count(n)

    6.2 统计全部关系的数量

    1
    2
    // Count all relationships
    MATCH ()-->() RETURN count(*);

    6.3 查询全部的约束和索引

    1
    2
    // Display constraints and indexes
    :schema

    6.4 列出节点标签

    1
    2
    // List node labels
    CALL db.labels()

    6.5 列出关系类型

    1
    2
    // List relationship types
    CALL db.relationshipTypes()

    6.6 什么是相关的,如何关联

    1
    2
    // What is related, and how
    CALL db.schema.visualization()

    6.7 存在什么样的节点

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // What kind of nodes exist
    // Sample some nodes, reporting on property and relationship counts per node.
    MATCH (n) WHERE rand() <= 0.1
    RETURN
    DISTINCT labels(n),
    count(*) AS SampleSize,
    avg(size(keys(n))) as Avg_PropertyCount,
    min(size(keys(n))) as Min_PropertyCount,
    max(size(keys(n))) as Max_PropertyCount,
    avg(size( (n)-[]-() ) ) as Avg_RelationshipCount,
    min(size( (n)-[]-() ) ) as Min_RelationshipCount,
    max(size( (n)-[]-() ) ) as Max_RelationshipCount

    七 docker方式安装neo4j

    7.1 快速安装

    安装命令如下

    1
    2
    3
    4
    5
    6
    7
    8
    docker run -d --name container_name \  //-d表示容器后台运行 --name指定容器名字
    -p 7474:7474 -p 7687:7687 \ //映射容器的端口号到宿主机的端口号
    -v /home/neo4j/data:/data \ //把容器内的数据目录挂载到宿主机的对应目录下
    -v /home/neo4j/logs:/logs \ //挂载日志目录
    -v /home/neo4j/conf:/var/lib/neo4j/conf //挂载配置目录
    -v /home/neo4j/import:/var/lib/neo4j/import \ //挂载数据导入目录
    --env NEO4J_AUTH=neo4j/password \ //设定数据库的名字的访问密码
    neo4j //指定使用的镜像
  • data——数据存放的文件夹
  • logs——运行的日志文件夹
  • conf——数据库配置文件夹(在配置文件 neo4j.conf 中配置包括开放远程连接、设置默认激活的数据库)
  • import——为了大批量导入csv来构建数据库,需要导入的节点文件 nodes.csv 和关系文件 rel.csv 需要放到这个文件夹下)
  • 执行完上述命令后就在后台把neo4j容器启动起来了,这个时候你就能在宿主机的浏览器中输入 localhost:7474 输入用户名和密码就能登录到数据库了。

    7.2 基础配置

    上述方式启动的neo4j是按照默认的配置进行启动的,而默认的数据库配置是不允许远程登陆的,这样对于在服务器上使用docker搭载neo4j的同学来说,就很不方便了。所以我们对默认配置进行一些改变,改变如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // 进入容器配置目录挂载在宿主机的对应目录,我这里是/home/neo4j/conf
    cd /home/neo4j/conf

    // vim编辑器打开neo4j.conf
    vim neo4j.conf

    // 进行以下更改
    //在文件配置末尾添加这一行
    dbms.connectors.default_listen_address=0.0.0.0 //指定连接器的默认监听ip为0.0.0.0,即允许任何ip连接到数据库

    //修改
    dbms.connector.bolt.listen_address=0.0.0.0:7687 //取消注释并把对bolt请求的监听“地址:端口”改为“0.0.0.0:7687”
    dbms.connector.http.listen_address=0.0.0.0:7474 //取消注释并把对http请求的监听“地址:端口”改为“0.0.0.0:7474”

    保存后退出,重启neo4j容器,可以使用容器的省略id或者生成容器时指定的容器名进行重启。

    防火墙设置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 查看当前防火墙状态,若为“inactive”,则防火墙已关闭,不必进行接续操作。
    sudo ufw status

    // 若防火墙状态为“active”,则使用下列命令开放端口
    sudo ufw allow 7474
    sudo ufw allow 7687

    // 重启防火墙
    sudo ufw reload

    7.3 数据导入

    为了加快速度,使用官方的 Neo4j-import 进行导入

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    // 数据准备
    清空data/databases/graph.db文件夹(如果有),将清洗好的结点文件nodes.csv和关系文件rel.csv拷贝到宿主机/home/neo4j/import中

    // docker以exec方式进入容器的交互式终端
    docker exec -it container_name(or container_id) /bin/bash

    // 停掉neo4j
    bin/neo4j stop

    //使用如下命令导入
    bin/neo4j-admin import \
    --database=graph.db \ //指定导入的数据库,没有系统则会在data/databases下自动创建一个
    --nodes ./import/nodes.csv //指定导入的节点文件位置
    --relationships ./import/rel.csv //指定导入的关系文件位置
    --skip-duplicate-nodes=true //设置重复节点自动过滤
    --skip-bad-relationships=true //设置bad关系自动过滤

    //可执行一行式终端命令
    bin/neo4j-admin import --database=graph.db --nodes ./import/nodes.csv --relationships ./import/rel.csv --skip-duplicate-nodes=true --skip-bad-relationships=true

    // 容器内启动neo4j
    bin/neo4j start

    // 退出交互式终端但是保证neo4j后台继续运行
    ctrl + P + Q

    //保险起见,重启neo4j容器
    docker restart container_name(or container_id)

    重启后使用另一台主机向服务器发送http请求进行远程登陆,在浏览器中输入服务器ip:7474

    切换连接模式 bolt:/ ,输入用户名和密码进行登陆,登陆成功发现在数据库一栏没找到新导入的数据库 graph.db

    这是因为配置不够全,继续进到容器挂载到宿主机的 /home/neo4j/conf 中对 neo4j.conf 进行配置

    1
    2
    3
    4
    5
    //在文件末尾添加默认的数据库
    dbms.active_database=graph.db

    // 保存后重启容器
    docker restart container_name(or container_id)

    重新进行远程连接,此时数据库的默认选择应该就切换到了新导入的graph.db。

    1. 1. 一 neo4j入门简介
      1. 1.1. 1.1 Neo4j CQL命令
      2. 1.2. 1.2 Neo4j CQL 函数
      3. 1.3. 1.3 Neo4j CQL数据类型
    2. 2. 二 neo4j基础命令
      1. 2.1. 2.1 CREATE命令
        1. 2.1.1. 2.1.1 创建没有属性的节点
        2. 2.1.2. 2.1.2 创建具有属性的节点
      2. 2.2. 2.2 MATCH命令
      3. 2.3. 2.3 RETURN子句
      4. 2.4. 2.4 MATCH & RETURN匹配和返回
        1. 2.4.1. 2.4.1 命令语法
        2. 2.4.2. 2.4.2 使用示例1
        3. 2.4.3. 2.4.3 使用示例2
      5. 2.5. 2.5 关系类型
        1. 2.5.1. 2.5.1 使用现有节点创建没有属性的关系
        2. 2.5.2. 2.5.2 使用现有节点创建有属性的关系
        3. 2.5.3. 2.5.3 使用新节点创建没有属性的关系
        4. 2.5.4. 2.5.4 使用新节点创建有属性的关系
        5. 2.5.5. 2.5.5 检索关系节点的详细信息
      6. 2.6. 2.6 CREATE创建标签
        1. 2.6.1. 2.6.1 单个标签到节点
        2. 2.6.2. 2.6.2 多个标签到节点
        3. 2.6.3. 2.6.3 单个标签到关系
      7. 2.7. 2.7 WHERE子句
        1. 2.7.1. 2.7.1 语法说明
        2. 2.7.2. 2.7.2 使用示例
        3. 2.7.3. 2.7.3 用WHERE子句创建关系
      8. 2.8. 2.8 DELETE删除
        1. 2.8.1. 2.8.1 删除节点
        2. 2.8.2. 2.8.2 DELETE节点和关系子句
        3. 2.8.3. 2.8.3 清空所有数据
      9. 2.9. 2.9 REMOVE删除
        1. 2.9.1. 2.9.1 删除节点/关系的属性
        2. 2.9.2. 2.9.2 删除节点/关系的标签
      10. 2.10. 2.10 SET子句
      11. 2.11. 2.11 ORDER BY排序
      12. 2.12. 2.12 UNION合并
        1. 2.12.1. 2.12.1 UNION子句
        2. 2.12.2. 2.12.2 UNION ALL子句
      13. 2.13. 2.13 LIMIT和SKIP子句
        1. 2.13.1. 2.13.1 LIMIT子句
        2. 2.13.2. 2.13.2 SKIP子句
      14. 2.14. 2.14 IN操作符
      15. 2.15. 2.15 ID属性
    3. 3. 二 CQL函数
      1. 3.1. 2.1 AGGREGATION聚合
        1. 3.1.1. 2.1.1 计数
        2. 3.1.2. 2.1.2 max和min函数
        3. 3.1.3. 2.1.3 AVG和SUM函数
      2. 3.2. 2.2 关系函数
        1. 3.2.1. 2.2.1 STARTNODE和ENDNODE
        2. 3.2.2. 2.2.2 ID和TYPE
    4. 4. 三 索引
      1. 4.1. 3.1 创建索引
      2. 4.2. 3.2 丢弃索引
    5. 5. 四 约束
      1. 5.1. 4.1 创建约束
      2. 5.2. 4.2 删除约束
    6. 6. 五 官方示例
      1. 6.1. 5.1 初始化脚本
      2. 6.2. 5.2 查询示例
        1. 6.2.1. 5.2.1 找到名为“Tom Hanks”的演员。
        2. 6.2.2. 5.2.2 查询10个用户
        3. 6.2.3. 5.2.3 查找20世纪90年代发行的电影
        4. 6.2.4. 5.2.4 列出所有 Tom Hanks 的电影
        5. 6.2.5. 5.2.5 查询出谁导演了Cloud Atlas
        6. 6.2.6. 5.2.6 查询出 Tom Hanks 的搭档
        7. 6.2.7. 5.2.7 查询出哪些人与Cloud Atlas有关系
        8. 6.2.8. 5.2.8 电影和演员距离Kevin Bacon最多4个“跳跃”
        9. 6.2.9. 5.2.9 培根路径,与Meg Ryan的任何关系中最短的路径
        10. 6.2.10. 5.2.10 扩展Tom Hanks的合作演员,以找到没有与Tom Hanks合作过的合作演员
        11. 6.2.11. 5.2.11 找个人把Tom Hanks介绍给Tom Cruise
        12. 6.2.12. 5.2.13 查询管理属性为Andrew Marin的记录
        13. 6.2.13. 5.2.14 查询有一个关系角色为Conductor的记录
      3. 6.3. 5.3 删除数据
    7. 7. 六 数据概况
      1. 7.1. 6.1 统计全部节点数量
      2. 7.2. 6.2 统计全部关系的数量
      3. 7.3. 6.3 查询全部的约束和索引
      4. 7.4. 6.4 列出节点标签
      5. 7.5. 6.5 列出关系类型
      6. 7.6. 6.6 什么是相关的,如何关联
      7. 7.7. 6.7 存在什么样的节点
    8. 8. 七 docker方式安装neo4j
      1. 8.1. 7.1 快速安装
      2. 8.2. 7.2 基础配置
      3. 8.3. 7.3 数据导入