- 下载
- 启动关闭命令
- cql语句
- 新增
- 查询
- 删除
- 修改
- 索引
- 约束
- 函数
- 备份
- SpringBoot集成
- 环境
- 创建实体类
- dao层
- controller层
下载链接
注意: neo4j版本超过4的,需要jdk11来支持,一般我们开发环境都是jdk1.8,所以我们只需选择3版本最高的即可。
#1. 控制台启动 ./neo4j.bat console #2. 作为守护进程 #启动 ./neo4j.bat start #关闭 ./neo4j.bat stop #3. 浏览器输入地址http://localhost:7474,输入初始用户密码neo4j,按照步骤修改初始密码cql语句
- create 创建节点、关系和属性
- match 检索有关节点、关系和属性数据
- return 返回查询结果
- where 提供条件过滤检索数据
- delete 删除节点和关系
- remove 删除节点和关系的属性
- order by 排序检索数据
- set 添加或更新标签
#1. 导入excel,注意:excel必须是csv,并且编码必须是UTF-8,excel放到安装目录neo4j-community-3.5.30import下
# 命令格式
load csv from "file:///本地路径" as 别名
create (:标签名 {字段1:别名{索引},字段2:别名{索引},...})
# demo
load csv from "file:///xiyou/西游关系表.csv" as line
create (:xiyouRelation {from:line{1},relation:line{3},to:line{0}})
#2. 创建关系
# 命令格式
match...
create (开始节点)-[关系]->(目标节点)
# demo
match (m:xiyouPerson),(n:xiyouRelation),(s:xiyouPerson) where m.name = n.from and s.name = n.to
create (m:xiyouPersonNew)-[n.relation]->(n:xiyouPersonNew)
#3. 创建多标签节点
# 命令格式
create (变量:标签1:标签2... {})
# demo
create (n:student:person {name:"张三",age:23})
查询
#1. 查询节点
# 命令格式
match (变量:标签 {字段:条件值}) where 条件 return 变量
# demo
match (n:xiyouPerson {name:"孙悟空"}) return n
#注意:如果id是数据库自动生成的,则单独查询id时,需要用id(变量)查询
match (n:xiyouPerson {name:"孙悟空"}) return n.name,id(n)
match (n:xiyouPerson) where n.name = "孙悟空" return n
#多标签查询
match (m:xiyouPerson),(n:xiyouRelation) where m.name = n.from return m.name,n.relation,n.to
#2. 查询关系
# 命令格式
match 变量 = (开始节点)-[关系]->(目标节点) where 条件 return 变量
# demo
match p = ()-[r:xiyougx]->(n:xiyouPerson) where n.name = "沙僧" return p
#3. 排序
# 命令格式
match ... return ... order by 字段 asc/desc
# demo
match (n:xiyouPerson) return id(n),n.name order by id(n) desc
#4. 分页查询
# 限制返回条数
match (n:xiyouPerson) return id(n),n.name order by id(n) desc limit 10
# 跳过前10条
match (n:xiyouPerson) return id(n),n.name order by id(n) desc skip 10
#5. 并集查询(注意并集查询必须保证字段名相同,所以要起别名)
# 并集去重
match (n:xiyouPerson) return n.name as name
union
match (m:person) return m.name as name
# 并集不去重
match (n:xiyouPerson) return n.name as name
union all
match (m:person) return m.name as name
#6. 查询有某个属性的节点(null)注意:即便那个属性的值是空串,那个属性也是存在的,唯有这个属性不存在才能满足下面的查询
match (n:xiyouPerson) where n.label is not null return n
#7. in的用法
match (n:xiyouPerson) where n.name in['孙悟空','唐僧'] return n
#
删除
#1. 删除节点
# 命令格式
match (变量:标签名)
delete 变量
# demo
match (n:xiyouRelation)
delete n
#2. 删除关系
# 命令格式
match ()-[变量:关系类型]->() where 条件
delete 变量
# demo
match ()-[r:xiyougx]->(n:xiyouPerson) where n.name = "沙僧"
delete r
#3. 移除节点标签
# 命令格式
match (变量:标签1:标签2... {name:"张三"})
remove 变量:移除的标签
# demo
match (n:student:person {name:"张三"}) remove n:student
#4. 移除节点的属性
# 命令格式
match (变量:标签 {})
remove 变量.移除属性
# demo
match (n:person {name:"张三"}) remove n.age
修改
#1. 添加或修改属性的值
# 命令格式
match (变量:标签 {})
set 变量.属性名 = 值
# demo
match (n:person {name:"张三"})
set n.age = 23
索引
# 创建索引 create index on :xiyouPerson(name) # 删除索引 drop index on :xiyouPerson(name)约束
# 唯一约束:unique create constraint on (n:xiyouPerson) assert n.name is unique函数
- 字符串函数:
- upper 大写
- lower 小写
- substring 截取
- replace 替换
- 聚合函数:
- count
- max
- min
- sum
- avg
- 关系函数
- startnode 关系开始节点
- endnode 关系结束节点
- id 关系ID
- type 关系的类型
# 去重 match (n:xiyouPerson) return distinct(n.name)备份
1. 关闭数据库 neo4j install service neo4j stop 2. 备份 neo4j-admin dump --database=graph.db --to=/neo4j/backup/graph_backup.dump 3. 恢复 neo4j-admin load --from=/neo4j/backup/graph_backup.dump --database=graph.db --forceSpringBoot集成 环境
创建实体类org.springframework.boot spring-boot-starter-data-neo4j
import org.springframework.data.neo4j.core.schema.*;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
@Node("xiyouPerson")
public class XiYouPerson implements Serializable {
@Id
@GeneratedValue
private Long id;
@Property
private String name;
}
dao层
@Repository public interface XiyouPersonDao extends Neo4jRepositorycontroller层{ }
import org.neo4j.driver.Driver;
import org.neo4j.driver.Record;
import org.neo4j.driver.Session;
import org.neo4j.driver.Value;
import org.neo4j.driver.types.Node;
import org.neo4j.driver.types.Path;
import org.neo4j.driver.types.Relationship;
@CrossOrigin(origins ="*",maxAge =3600)
@RestController
@RequestMapping("/neo4j")
public class Neo4jController {
@Autowired
private XiyouPersonDao xiyouPersonDao;
@Autowired
private Driver driver;
@RequestMapping(value = "/queryByCQLGX.do" , produces = "application/json;charset=utf-8" ,method = RequestMethod.GET)
public Result queryByCQLGX(){
org.neo4j.driver.Result result = driver.session().run("MATCH p=()-[r:xiyougx]->() RETURN p LIMIT 25");
List list = result.list();
List 


