# SpringDataNeo4j-Demo **Repository Path**: flgitee/spring-data-neo4j-demo ## Basic Information - **Project Name**: SpringDataNeo4j-Demo - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-06 - **Last Updated**: 2024-09-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # neo4j 部署 - 这里采用docker 部署neo4j ```aidl docker run -d -p 7474:7474 -p 7687:7687 --name neo4j -e "NEO4J_AUTH=neo4j/password" neo4jchina/neo4j-chs ``` # 官网下载 [下载中心](https://neo4j.com/deployment-center/) 可以选择windows桌面版 ## 说明 1. 此项目默认连接本地neo4j数据库,如需更改,请自行在yml中修改 2. 可以参考![最终效果图](多关系效果图.png) 3. 根据上图思考如何构造这样一个图,可以参考代码 [MovieRepositoryTest#initData()](src/test/java/com/xuni/neo4j/dao/MovieRepositoryTest.java) 4. 构造好后,可以在图数据库中查看当前构造的数据 5. 然后学习[spring-data-neo4j](https://docs.spring.io/spring-data/neo4j/docs/current/reference/html/) 相应的语法,进型复杂查询练习 ## 常用语句 ```aidl 1. 同时创建节点和关系 create (n1:class {name:"英语1"})-[r:BASIC]->(n2:class2 {name:"英语2"}) 2. 批量删除节点 with [42,43,44,45] as nodeIds unwind nodeIds as nodeId match (n) where id(n) = nodeId delete n 3. 删除当前节点下的所有关系(删除节点前必须做此操作) match (n)-[r]-() where id(n)=46 delete r 4. 为已经存在的节点创建关系 match (a:class {name:"英语1"}),(b:class2 {name:"英语2"}) create (a)-[r:BASIC]->(b) 5. 删除当前节点下的指定关系(根据关系id删除) match (n)-[r]-() where id(n)=46 and id(r)=0 delete r 6. 根据关系id删除关系 match (n)-[r]-() where id(r)=1 delete r 7. 删除全部节点和关系 match (n) detach delete n 8. 创建关系时,给关系增加属性 match (n1 {name:"大学英语III"}), (n2 {name:"大学英语IV"}) create (n1)-[r:BASIC {since: 2023}]->(n2) 9. 根据标签查找当前节点以及它的关系节点 match (n:profession {name:"计算机专业"})-[r]->(n2) return n,n2 10. 根据关系名称查找:当前节点往后走的整个链条(递归调用) 方法1:match path = (n {name:"大学英语II"})-[r:BASIC*]->() return nodes(path) 方法2:match path = (n)-[r:BASIC*]->() where n.name="大学英语II" return nodes(path) 11. 根据关系名称查找:当前节点有关系的整个链条 match path = (n)-[r:BASIC*]-() where n.name="大学英语III" return nodes(path) 12. 查看标签有多少个节点 match (n:Person) return count(n) as person_count 13. 删除标签中的所有节点(同时自动删除它们的关系) match (n:Person) detach delete n 14. 创建一对节点(同时建立它们的联系) create (n1:Person{name:"张三"})-[r:couple{roles:"boyfriend"}]->(n2:Person{name:"rose"}) 15. merge也可以创建两个节点之间的关系 match (n:Person {name:"Shawn"}),(n2:Person {name:"Sally"}) merge (n)-[:FRIENDS {since:2023}]->(n2) 16. csv文件导入 load csv from "file:///test.csv" as line create (:Article {name:line[1], year: toInteger(line[2])}) 17. 移除节点对应的标签 match (n:Student {name:"李四"}) remove n:Student return n 18. 给已有节点添加标签 match (n {name:"李四"}) set n:Person return n 19. 移除节点属性 match (n:Person) where n.name="李四" remove n.age return n 20. 按照节点属性进行排序 match (n:Student) return id(n) as id order by id asc 21. 其它命令 * union: 拼接两个查询语句,不返回重复的行 * union all: 拼接两个查询语句,返回重复的行 * limit n: 选择前几行 * skip n: 跳过前几行 22. 给已有节点添加属性 match (n:Student) where n.name="张三" set n.age=18,n.sex="女" return n 23. null值查询 match (n:Student) where n.sex is null return n 24. in查询 match (n:Student) where n.name in ["张三", "小红"] return n 25. index索引 * 创建索引 create index on :Student (name) * 删除索引 drop index on :Student (name) 26. unique约束 * 创建唯一性约束 create constraint on (n:Student) assert n.name is unique * 删除唯一性约束 drop constraint on (n:Student) assert n.name is unique ```