1. 创建节点
CREATE (dept:Dept { deptno:10,dname:"Accounting",location:"Hyderabad" })
其中dept为节点名,Dept为标签名(可理解为表名)
CREATE (emp:Employee{id:123,name:"Lokesh",sal:35000,deptno:10})
2. 检索
Neo4j使用CQL MATCH + RETURN命令 -
- 检索节点的某些属性
- 检索节点的所有属性
- 检索节点和关联关系的某些属性
- 检索节点和关联关系的所有属性
MATCH (dept: Dept) RETURN dept.deptno,dept.dname
3. 创建关系
在以下场景中,我们可以使用Neo4j CQL CREATE命令来创建两个节点之间的关系。 这些情况适用于Uni和双向关系。
- 在两个现有节点之间创建无属性的关系
MATCH (e:Customer) RETURN e
MATCH (cc:CreditCard) RETURN cc
MATCH (e:Customer),(cc:CreditCard) CREATE (e)-[r:DO_SHOPPING_WITH ]->(cc)
- 在两个现有节点之间创建与属性的关系
MATCH (cust:Customer),(cc:CreditCard) CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc) RETURN r
- 在两个新节点之间创建无属性的关系
- 在两个新节点之间创建与属性的关系
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"})
- 在具有WHERE子句的两个退出节点之间创建/不使用属性的关系
4. 创建标签
使用Neo4j CQL CREATE命令
- 为节点创建单个标签
CREATE (google1:GooglePlusProfile)
- 为节点创建多个标签
CREATE (m:Movie:Cinema:Film:Picture)
- 为关系创建单个标签
CREATE (p1:Profile1)-[r1:LIKES]->(p2:Profile2)、
5. Where子句创建关系
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
MATCH (a{name:"Laurence Fishburne"})-[r1:ACTED_IN]->(m)<-[r2:DIRECTED]-(d) RETURN a,r1,r2,m,d与MATCH (a)-[r1:ACTED_IN]->(m)<-[r2:DIRECTED]-(d) where a.name="Laurence Fishburne" RETURN a,r1,r2,m,d中where子句等价
6. Delete节点和关系
MATCH (e: Employee) DELETE e
MATCH (cc: CreditCard)-[rel]-(c:Customer) DELETE cc,c,rel
7. Remove删除标签和属性
删属性
MATCH (book { id:122 }) REMOVE book.price RETURN book
删标签
MATCH (m:Movie) REMOVE m:Picture
8. Set添加属性
MATCH (dc:DebitCard) SET dc.atm_pin = 3456 RETURN dc
9. Sorting排序
MATCH (emp:Employee) RETURN emp.empid,emp.name,emp.salary,emp.deptno ORDER BY emp.name
10. Union合并
<MATCH Command1> UNION <MATCH Command2>
11. Limit与skip
MATCH (emp:Employee) RETURN emp LIMIT 2
MATCH (emp:Employee) RETURN emp SKIP 2
Neo4j CQL已提供“SKIP”子句来过滤或限制查询返回的行数。 它修整了CQL查询结果集顶部的结果,前两行跳过。
12. Merge合并
MERGE = CREATE + MATCH
用于检查是否已经创建该节点,因为CQL MERGE命令检查该节点在数据库中是否可用。 如果它不存在,它创建新节点。 否则,它不创建新的。
13. In 操作
MATCH (e:Employee) WHERE e.id IN [123,124] RETURN e.id,e.name,e.sal,e.deptno
14. 方向关系
Neo4j只支持有方向的关系
15. 字符串函数(upper、lower、substring、replace)
MATCH (e:Employee) RETURN e.id,UPPER(e.name),e.sal,e.deptno
Upper、lower、substring(字符串下标SUBSTRING(e.name,0,2),0到2的字符)、replace
16. 聚合函数(count、max、min、sum、avg)
MATCH (e:Employee) RETURN MAX(e.sal),MIN(e.sal)
17. 关系函数(startnode、endnode、id、type)
MATCH (a)-[movie:ACTION_MOVIES]->(b) RETURN ENDNODE(movie)
MATCH (a)-[movie:ACTION_MOVIES]->(b) RETURN ID(movie),TYPE(movie)
系统内部ID
18. Unique约束
CREATE CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE
DROP CONSTRAINT ON (cc:CreditCard) ASSERT cc.number IS UNIQUE
19. 模糊查询
查询N类型中,属性attr包含‘a1’或者‘a2’的所有节点。
match (n:N) where n.attr =~ '.*a1.*|.*a2.*' return n
参考:https://cloud.tencent.com/developer/article/1336299
https://www.w3cschool.cn/neo4j/
https://neo4j.com/docs/getting-started/3.5/get-started-with-neo4j/