HugeGraph学校笔记
图数据库学习
Gremlin语法
图基本概念
图 :Graph:关系图,比如:同学以及朋友的关系,银行转账等
顶点:Vertex:一般指实体,比如 人,账户等
边:Edge,一般指关系。比如朋友关系,转账动作
属性:property:顶点或边可以包含属性,比如人的姓名,人的年龄,转账的时间
类型:Label ,边或者顶点的类型
Gremlin Steps包括:
V()`、`E()`、`id()`、`label()`、`properties()`、`valueMap()`、`values()
g代表整个图,一切查询都是以图开始
// 根据id查询顶点 g.V('4:Gremlin', '3:TinkerPop')
Step E():查询边,一般作为图查询的第1步,后面可以续接的语句种类繁多。
示例:
// 查询图中所有的边
g.E()
Step id():获取顶点、边的id。
示例:
// 查询所有顶点的id
g.V().id()
12
Step label():获取顶点、边的label。
示例:
// 查询所有顶点的label
g.V().label()
Step properties():获取顶点、边的属性。
示例:
// 查询所有顶点的属性
g.V().properties()
// 查询所有顶点的“lang”属性
// 如果无“lang”属性的顶点将跳过
g.V().properties('lang')
此外 properties()还可以和 key()、value()搭配使用,以获取属性的名称或值。
示例 key():
// 查询所有顶点的属性名称
g.V().properties().key()
Step valueMap():获取顶点、边的属性, valueMap()与 properties()不同的地方是:它们返回的结构不一样,后者将所有的属性扁平化到一个大列表里面,一个元素代表一个属性;前者保持一个顶点或一条边的属性作为一组,每一组由若干属性的键值对组成。
// 查询所有顶点的属性
g.V().valueMap()
Step values():获取顶点、边的属性值。
示例:
// 查询所有顶点的属性值
// 效果等同于:
// g.V().properties().value()
g.V().values()
边的遍历操作
第2期 Gremlin Steps:
out()`、`in()`、`both()`、`outE()`、`inE()`、`bothE()`、`outV()`、`inV()`、`bothV()`、`otherV()
边遍历概念就是通过顶点访问所有与其有关联边的邻接顶点(或者仅访问邻接边),边遍历是图数据库的核心
out():访问顶点的OUT方向邻接点
示例1:
// 先查询图中所有的顶点
// 然后访问顶点的OUT方向邻接点
// 注意:out()的基准必须是顶点
g.V().out()
示例2:
// 访问某个顶点的OUT方向邻接点
// 注意'3:TinkerPop'是顶点的id
// 该id是插入顶点时自动生成的
g.V('3:TinkerPop').out()
边遍历概念
边遍历是指通过顶点来访问与其有关联边的邻接顶点(或者仅访问邻接边),边遍历是图数据库与图计算的核心。我们先以TinkerPop官网的例子来解释一下边遍历的相关Steps:
顶点为基准的Steps(如上图中的顶点“4”):
out(label): 根据指定的EdgeLabel来访问顶点的OUT方向邻接点(可以是零个EdgeLabel,代表所有类型边;也可以一个或多个EdgeLabel,代表任意给定EdgeLabel的边,下同)
in(label): 根据指定的EdgeLabel来访问顶点的IN方向邻接点
both(label): 根据指定的EdgeLabel来访问顶点的双向邻接点
outE(label): 根据指定的EdgeLabel来访问顶点的OUT方向邻接边
inE(label): 根据指定的EdgeLabel来访问顶点的IN方向邻接边
bothE(label): 根据指定的EdgeLabel来访问顶点的双向邻接边
outV(): 访问边的出顶点(注意:这里是以边为基准,上述Step均以顶点为基准),出顶点是指边的起始顶点
inV(): 访问边的入顶点,入顶点是指边的目标顶点,也就是箭头指向的顶点
bothV(): 访问边的双向顶点
otherV(): 访问边的伙伴顶点,即相对于基准顶点而言的另一端的顶点
过滤器说明
has
hasLabel(labels…): object的label与labels列表中任何一个匹配就可以通过
hasId(ids…): object的id满足ids列表中的任何一个就可以通过
has(key, value): 包含属性“key=value”的object通过,作用于顶点或者边
has(label, key, value): 包含属性“key=value”且label值匹配的object通过,作用于顶点或者边
has(key, predicate): 包含键为key且对应的value满足predicate的object通过,作用于顶点或者边
hasKey(keys…): object的属性键包含所有的keys列表成员才能通过,作用于顶点属性
hasValue(values…): object的属性值包含所有的values列表成员才能通过,作用于顶点属性
has(key): 包含键为key的属性的object通过,作用于顶点或者边
hasNot(key): 不包含键为key的属性的object通过,作用于顶点或者边
hasLabel(label...),通过label来过滤顶点或边,满足label列表中一个即可通过
// 查询label为"person"的顶点
g.V().hasLabel('person')
// 查询label为"person"或者"software"的顶点 g.V().hasLabel('person', 'software')
count(): 统计查询结果集中元素的个数;
range(m, n): 指定下界和上界的截取,左闭右开。比如range(2, 5)能获取第2个到第4个元素(0作为首个元素,上界为-1时表示剩余全部);
limit(n): 下界固定为0,指定上界的截取,等效于range(0, n),语义是“获取前n个元素”。比如limit(3)能获取前3个元素;
tail(n): 上界固定为-1,指定下界的截取,等效于range(count - n, -1),语义是“获取后n个元素”。比如tail(2)能获取最后的2个元素;
skip(n): 上界固定为-1,指定下界的截取,等效于range(n, -1),语义是“跳过前n个元素,获取剩余的元素”。比如skip(6)能跳过前6个元素,获取最后2个元素。

浙公网安备 33010602011771号