基本概念
图(Graph):指关系图,比如:同学及朋友关系图、银行转账图等
顶点(Vertex):一般指实体,比如:人、账户等
边(Edge):一般指关系,比如:朋友关系、转账动作等
属性(Property):顶点或边可以包含属性,比如:人的姓名、年龄、转账的时间等
此外:
顶点、边都有类别区分,在Gremlin里面称之为label
。
顶点与边均由id来标识,Gremlin里顶点与边必须包括id,一般图数据库的顶点id或边id均由系统自动生成。
基本操作
V()
Step V()
:查询顶点,一般作为图查询的第一步,后面可以续接的语句很多。
示例:
// 查询图中所有的顶点
// g代表整个图
// 一切查询都是以图开始
g.V()
// 根据id查询顶点
g.V('4:Gremlin', '3:TinkerPop')
E()
Step E()
:查询边,一般作为图查询的第1步,后面可以续接的语句很多。
示例:
// 查询图中所有的边
g.E()
// 根据id查询边
g.E('S3:TinkerPop>4>>S4:Gremlin')
id()
Step id()
:获取顶点、边的id
示例:
// 查询所有顶点的id
g.V().id()
// 查询所有边的id
g.E().id()
Gremlin Step是作用在上一步产生的结果集上,如果上一步的结果是多个元素,那么这里
id()
将返回多个元素的id
label()
Step label()
:获取顶点、边的label
示例:
// 查询所有顶点的label
g.V().label()
// 查询所有边的label
g.E().label()
properties()
Step properties()
:获取顶点、边的属性
示例:
// 查询所有顶点的属性
g.V().properties()
// 查询所有顶点的"lang"属性
// 没有"lang"属性的顶点将被跳过
g.V().properties('lang')
// 查询所有边的属性
g.E().properties()
properties()
可以和key()
、value()
配合使用,获取属性的名称或者值:
// 查询所有顶点的属性名称
g.V().properties().key()
// 查询所有顶点的属性值
g.V().properties().value()
valueMap()
Step valueMap()
:获取顶点、边的属性。
valueMap()
与properties()
不同的地方是:它们返回的结构不一样,后者将所有的属性扁平化到一个大列表中,一个元素代表一个属性;前者保持一个顶点或一条边的属性作为一组,每一组由若干属性的键值对组成。
示例:
// 查询所有顶点的属性
g.V().valueMap()
// 查询所有边的属性
g.E().valueMap()
properties()
返回的结果:
{
"id": "e56f6436-c01b-4162-a130-e277ebf929e4",
"data": [
// 扁平化的列出所有顶点的所有属性
{
"id": "okram>name",
"value": "Marko A. Rodriguez",
"label": "name"
},
{
"id": "okram>age",
"value": 29,
"label": "age"
},
{
"id": "okram>addr",
"value": "Santa Fe, New Mexico",
"label": "addr"
},
{
"id": "okram>weight",
"value": 1.0,
"label": "weight"
},
{
"id": "dalaro>name",
"value": "Dan LaRocque ",
"label": "name"
},
{
"id": "dalaro>age",
"value": 0,
"label": "age"
},
{
"id": "dalaro>addr",
"value": "",
"label": "addr"
},
{
"id": "dalaro>weight",
"value": 1.0,
"label": "weight"
}
],
"type": "OTHER",
"duration": "48",
"showNum": 47,
"message": "",
"graph": {
"vertices": [],
"edges": [],
"styles": {}
}
}
valueMap()
返回的结果:
{
"id": "30e89152-b4f2-4f3d-8bba-06041927c53f",
"data": [
// 按顶点做了分组,每一组就是一个顶点,内部为这个顶点的所有属性
{
"name": [
"Marko A. Rodriguez"
],
"age": [
29
],
"addr": [
"Santa Fe, New Mexico"
],
"weight": [
1.0
]
},
{
"name": [
"Dan LaRocque "
],
"age": [
0
],
"addr": [
""
],
"weight": [
1.0
]
}
],
"type": "OTHER",
"duration": "27",
"showNum": 12,
"message": "",
"graph": {
"vertices": [],
"edges": [],
"styles": {}
}
}
values()
Step values()
:获取顶点、边的属性值
示例:
// 查询所有顶点的属性值
// 效果等同于 g.V().properties().value()
g.V().values()
// 查询所有顶点的"lang"属性
// 效果等同于 g.V().properties('lang').value()
g.V().values('lang')
// 查询所有边的属性值
g.E().values()