查询方面:几乎没有差异
MATCH (a {firstname: 'Avery'})-[b]->(c)
RETURN a, b, c
变长路径:有差异
例如:找到两个节点间,最多长达5跳的路径
GQL:
MATCH ((a)-[r]->(b)){1,5}
RETURN a, r, b
Cypher:
MATCH (a)-[r*1..5]->(b)
RETURN a, r, b
创建节点(插入节点)
Cypher使用Create或Merge关键字,GQL使用Insert关键字
插入或创建一个节点(标签为pet ,名字为unique 种类是dog)
GQL:
INSERT (:Pet {name: 'Unique', pettype: 'Dog'})
Cypher:
CREATE (:pet {name: 'unique', pettype: 'dog'})
同时也支持直接建立两个节点,然后直接建立关系。例如:
INSERT (:Person {firstname: 'Avery'
,lastname: 'Stare'
,joined: date("2022-08-23")})
-[:LivesIn {since: date("2022-07-15")}]->
(:City {name: 'Granville'
,state: 'OH'
,country: 'USA'})
或者直接匹配两个节点后,建立关系:
MATCH (a {firstname: 'Avery'})
,(d {name: 'Unique'})
INSERT (a)-[:HasPet]->(d)
修改属性、增加属性、删除属性,删除节点和关系都与Cypher相同
MATCH (d:Pet) where d.name="Unique"
SET d.weight_kg=26
MATCH (e {lastname: 'Stare'})
REMOVE e.joined
MATCH (a {firstname: 'Avery'})-[b]->(c)
DETACH DELETE a, c
新概念GRAPH TYPE:GQL支持创建固定类型图相当于一种模板,通过制定节点标签、属性、关系类型来约束图形内容。
例如:
CREATE GRAPH TYPE /MyFolder/control/fraud_TYPE // DDL
(customer:Customer => {id::STRING, name::STRING}),
(account:Account => {no::STRING, acct_type::STRING }),
(customer)-[:HOLDS]->(account),
(account)-[:TRANSFER {amount::INTEGER}]->(account)
使用以下语句创建图和图的类型。
CREATE GRAPH /MyFolder/control/fraud /* graph name is “fraud” */
TYPED /MyFolder/control/fraud_TYPE /* graph type is fraud_TYPE */
当数据修改语句完成时,其内容必须符合图类型指定的限制。如果数据不符合图类型限制,则语句将导致异常,事务将回滚。