图数据库(neo4j)

下载

下载链接
注意: 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.30\import下
	# 命令格式
		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 --force

SpringBoot集成

环境
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
创建实体类
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 Neo4jRepository<XiYouPerson,Long> {
}
controller层
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<Record> list = result.list();
        List<Map<String, Object>> maps = new ArrayList<>();
        for (Record record : list) {
            Map<String, Object> map = new HashMap<>();
            Path p = record.get("p").asPath();
            Map<String, Object> startNode = new HashMap<>(p.start().asMap());
            map.put("startNode",startNode);
            Map<String, Object> endNode = new HashMap<>(p.end().asMap());
            map.put("endNode",endNode);
            Iterator<Relationship> iterator = p.relationships().iterator();
            while(iterator.hasNext()){
                Relationship next = iterator.next();
                Map<String, Object> relationShipMap = new HashMap<>(next.asMap());
                map.put("relationShip",relationShipMap);
            }
            maps.add(map);
        }

        return new Result(RequestCode.SUCCESS,"查询成功!",true,maps);
    }

    @RequestMapping(value = "/queryByID.do" , produces = "application/json;charset=utf-8" ,method = RequestMethod.GET)
    public Result queryByID(long id){
        Optional<XiYouPerson> byId = xiyouPersonDao.findById(id);
        XiYouPerson xiYouPerson = byId.get();
        return new Result(RequestCode.SUCCESS,"查询成功!",true,xiYouPerson);
    }

    @RequestMapping(value = "/addXiyouPerson.do" , produces = "application/json;charset=utf-8" ,method = RequestMethod.POST)
    public Result addXiyouPerson(String name){
        XiYouPerson xiYouPerson = new XiYouPerson();
        xiYouPerson.setName(name);
        XiYouPerson newXiyouPerson = xiyouPersonDao.save(xiYouPerson);
        return new Result(RequestCode.SUCCESS,"新增成功!",true,newXiyouPerson);
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值