(一)、概念
nGQL是Nebula Graph使用的的声明式图查询语言,支持灵活高效的图模式,而且nGQL是为开发和运维人员设计的类SQL查询语言,易于学习。
exp:CREATE TAG player(name string, age int);
ps:正确使用索引可以加速查询,但是索引会导致写性能下降90%甚至更多,只有在根据点或边的属性定位点或边时才使用索引。
模式(pattern):
1.1、单点模式
exp:(a)
1.2、多点关联模式
exp:(a) - [] -> (b) <- [] -(c)
ps: 只有在涉及某个点时,才需要命名这个点。如果不涉及这个点,则可以省略名称
(a)-[]->()<-[]-(c)
1.3、标签模式
(a:User:Admin)-[]->(b)
1.4、属性模式
(a {name: 'Andres', sport: 'Brazilian Ju-Jitsu'})
(a)-[{blocked: false}]->(b)
1.5、边模式
(a)-[]-(b)
(a)-[r]->(b)
(a)-[r:REL_TYPE]->(b)
(a)-[r:TYPE1|TYPE2]->(b)
(a)-[:REL_TYPE]->(b)
1.6、变长模式
(a)-[*2]->(b) == (a)-[]->()-[]->(b)
(a)-[*3..5]->(b)
1.7、路径变量
p = (a)-[*3..5]->(b)
(二)数值类型
1、int [-9223372036854775808, 9223372036854775807]
2、double
(三)布尔
bool true / false
(四)字符串
1、定长字符串
CREATE TAG t1 (p1 fixed_string(10));
2、变长字符串
CREATE TAG t2 (p2 string);
3、转义字符串
"\n\t\r\b\f"
4、字符串中的单引号和双引号都支持
YIELD '' AS quote1, "" AS quote2, "'" AS quote3, '"' AS quote4
(五)日期和时间类型
DATE
、TIME
、DATETIME
和TIMESTAMP
1、DATE(YYYY-MM-DD)
2、TIME(hh:mm:ss.ususus)
3、DATETIME(YYYY-MM-DDThh:mm:ss.ususus)
4、TIMESTAMP()
exp:
CREATE TAG date1(p1 date, p2 time, p3 datetime);
INSERT VERTEX date1(p1, p2, p3) VALUES "test1":(date("2021-03-17"), time("17:53:59"), datetime("2021-03-17T17:53:59"));
CREATE TAG school(name string , found_time timestamp);
INSERT VERTEX school(name, found_time) VALUES "DUT":("DUT", 573206400);
INSERT VERTEX school(name, found_time) VALUES "DUT":("DUT", timestamp("1988-03-01T08:00:00"));
INSERT VERTEX school(name, found_time) VALUES "dut":("dut", now());
WITH time({hour: 12, minute: 31, second: 14}) AS d RETURN d;
WITH date({year: 1984, month: 10, day: 11}) AS x RETURN x + 1
(六)NULL
默认情况下,插入点或边时,属性值可以为NULL
,用户也可以设置属性值不允许为NULL
(NOT NULL
),即插入点或边时必须设置该属性的值,除非创建属性时已经设置默认值。
CREATE TAG player(name string NOT NULL, age int);
SHOW CREATE TAG player;
INSERT VERTEX player(name, age) VALUES "Kobe":("Kobe",null);
FETCH PROP ON player "Kobe";
(七)列表
列表(List)是复合数据类型,一个列表是一组元素的序列,可以通过元素在序列中的位置访问列表中的元素。
RETURN [1, 2, 3] AS List;
RETURN range(1,5)[3];
RETURN range(1,5)[-2];
RETURN [n IN range(1,5) WHERE n > 2] AS a
RETURN [n IN range(1,5) WHERE n > 2 | n + 10] AS a;
RETURN [n IN range(1,5) | n + 10] AS a;
RETURN tail([n IN range(1, 5) | 2 * n - 10]) AS a;
RETURN size([1,2,3]);
GO FROM "player100" OVER follow WHERE follow.degree NOT IN [x IN [92, 90] | x + $$.player.age] YIELD follow._dst AS id, follow.degree AS degree;
MATCH p = (n:player{name:"Tim Duncan"})-[:follow]->(m) RETURN [n IN nodes(p) | n.age + 100] AS r;
(八)集合
集合(Set)是复合数据类型。
(九)映射
映射(Map)是复合数据类型。一个映射是一组键值对(Key-Value)的无序集合。在映射中,Key是字符串类型,Value可以是任何数据类型。用户可以通过map['<key>']
的方法获取映射中的元素。
YIELD {key: 'Value', listKey: [{inner: 'Map1'}, {inner: 'Map2'}]}
(十)类型转换
UNWIND [true, false, 'true', 'false', NULL] AS b RETURN toBoolean(b) AS b;
RETURN toFloat(1), toFloat('1.3'), toFloat('1e3'), toFloat('not a number');
RETURN toInteger(1), toInteger('1'), toInteger('1e3'), toInteger('not a number');