3

【CQL】总结neo4j

 3 years ago
source link: https://www.guofei.site/2020/11/20/neo4j.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【CQL】总结neo4j

2020年11月20日

Author: Guofei

文章归类: 3-3-图模型 ,文章编号: 360


版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2020/11/20/neo4j.html

Edit

安装配置

用 docker 直接用

docker run \
    --publish=7474:7474 --publish=7687:7687 \
    --volume=$HOME/neo4j/data:/data \
    neo4j

UI洁面: http://localhost:7474
初始密码:neo4j/neo4j

数据库

create database movies

:use movies

增加节点

CREATE (
   <node-name>:<label-name>
   { 	
      <Property1-name>:<Property1-Value>
      ........
      <Propertyn-name>:<Propertyn-Value>
   }
)

用来创建节点

  • node-name 节点名
  • label-name 节点标签名
  • Property1-name:roperty1-Value 键值对
    • title 属性是图形化显示时,默认显示的名字
  • CREATE 可以换成 MERGE,效果就是:如果数据库中已经有完全一样的 node,就不新建了
CREATE (m:Movie{title:'头脑特工队',year:'2020'})

创建多个标签

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

增加关系

CREATE (p1:Profile1)-[r1:Links]->(p2:Profile2)
CREATE (m:Movie{title:'冰雪奇缘',year:'2020'})-[r1:links{maker:'company maker'}]->(c:Campany{name:'迪士尼',location:'USA'})

(实测会同时创建新的node)

查询节点,并创建关系

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>)
MATCH(m1:Movie),(m2:Movie)
WHERE m1.year=m2.year
CREATE (m1)-[r:SAME_YEAR{is_same_year:'yes'}]->(m2)
RETURN r

DELETE 用来删除节点和关系

MATCH (e: Employee) DELETE e
MATCH (m:Movie)
WHERE m.name='头脑特工队'
DELETE m

(需要先删除关系,才能删除节点)

MATCH (m1:Movie)-[r:LINKS]-(m2:Movie)
WHERE m1.name='冰雪奇缘'
DELETE r,m1,m2

remove

remove 用来删除标签和属性

MATCH(m1:Movie)
WHERE m1.name='冰雪奇缘'
REMOVE m1.year

set

改变标签和属性

MATCH(m1:Movie)
WHERE m1.name='冰雪奇缘'
SET m1.year='2018'
  • 不存在的会添加,存在的会替换

MATCH (col {name: "Tom Hanks"}) RETURN col

(这里的col是你自定义的列名)

MATCH(m1:Movie)
WHERE m1.name='冰雪奇缘'
RETURN m1.year
LIMIT 10
MATCH (col:<label-name>)
WHERE 条件
RETURN 子句
ORDER BY 条件 【DESC/ASC】
LIMIT 5
  • ORDER BY 和 sql 的用法一样
  • LIMIT 5 也和 sql 的用法一样。还可以用 SKIP 5 获取底部的5条记录
  • 可以 RETRUN 不存在的属性,这时 RETRUN 一个 null
  • RETRUN 后面也可以跟 DISTINCT 来去重
  • RETURN 后面的字段可以用 AS 重新命名
  • WHERE 条件可以是 IN ,例如 WHERE m.title IN ['头脑特工队','冰雪奇缘']

UNION

两个子句中间放UNION语句,用来合并两个结果

  • 与sql一样,union 会自动去重,union all 不会去重

查询关系

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

MATCH (m1:Movie)-[r]-(m2:Movie) WHERE m1.title=’头脑特工队’ RETURN r

函数

字符串函数

  • UPPER
  • LOWER
  • SUBSTRING SUBSTRING(<input-string>,<startIndex> ,<endIndex>),索引从0开始
  • REPLACE

聚合(好像不能搭配 group by,结果就只能是一行)

  • COUNT

关系的函数

  • STARTNODE(r) :返回 r 这个关系的开始 node
  • ENDNODE(r): 结束 node
  • ID(r):关系的id,也可以输入node返回node的id
  • TYPE(r):关系的类型,也就是类似 node-label 的东西
MATCH (a)-[r:links]->(c) WHERE r.maker='company maker' RETURN STARTNODE(r)

案例与技巧

删库到跑路

# 清除全部带关系的节点、关系
MATCH (a)-[r]->(b) DELETE r,a,b

# 清除节点,如果节点还连着关系,会报错
MATCH (a) DELETE a

如果是一次提交的语句,冒号前面的名字会识别成同一个节点。如果是分两次提交,会识别成不同的节点

CREATE (m:Movie{title:'冰雪奇缘',year:'2020'})
CREATE (m2:Movie{title:'头脑特工队',year:'2018'})
CREATE (c:Campany{name:'迪士尼',location:'USA'})
CREATE (m)-[r1:links{maker:'company maker'}]->(c),
(m2)-[r2:links{maker:'company maker'}]->(c)
  • 这里的m和c认为是同一个,如果分开提交就被认为是不同的,然后重复生成节点。
# * 关键字代表一切关系
match (a)-[*]-(b) return a,b

# 还有一种特殊写法
MATCH (a)-[:links]->(c)<-[:links]-(a1) RETURN a,a1

您的支持将鼓励我继续创作!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK