基本概念

图(Graph):指关系图,比如:同学及朋友关系图、银行转账图等

顶点(Vertex):一般指实体,比如:人、账户等

边(Edge):一般指关系,比如:朋友关系、转账动作等

属性(Property):顶点或边可以包含属性,比如:人的姓名、年龄、转账的时间等

此外:

顶点、边都有类别区分,在Gremlin里面称之为label

顶点与边均由id来标识,Gremlin里顶点与边必须包括id,一般图数据库的顶点id或边id均由系统自动生成。

基本操作

V()

Step V():查询顶点,一般作为图查询的第一步,后面可以续接的语句很多。

示例:

  1. // 查询图中所有的顶点
  2. // g代表整个图
  3. // 一切查询都是以图开始
  4. g.V()
  5. // 根据id查询顶点
  6. g.V('4:Gremlin', '3:TinkerPop')

E()

Step E():查询边,一般作为图查询的第1步,后面可以续接的语句很多。

示例:

  1. // 查询图中所有的边
  2. g.E()
  3. // 根据id查询边
  4. g.E('S3:TinkerPop>4>>S4:Gremlin')

id()

Step id():获取顶点、边的id

示例:

  1. // 查询所有顶点的id
  2. g.V().id()
  3. // 查询所有边的id
  4. g.E().id()

Gremlin Step是作用在上一步产生的结果集上,如果上一步的结果是多个元素,那么这里id()将返回多个元素的id

label()

Step label():获取顶点、边的label

示例:

  1. // 查询所有顶点的label
  2. g.V().label()
  3. // 查询所有边的label
  4. g.E().label()

properties()

Step properties():获取顶点、边的属性

示例:

  1. // 查询所有顶点的属性
  2. g.V().properties()
  3. // 查询所有顶点的"lang"属性
  4. // 没有"lang"属性的顶点将被跳过
  5. g.V().properties('lang')
  6. // 查询所有边的属性
  7. g.E().properties()

properties()可以和key()value()配合使用,获取属性的名称或者值:

  1. // 查询所有顶点的属性名称
  2. g.V().properties().key()
  3. // 查询所有顶点的属性值
  4. g.V().properties().value()

valueMap()

Step valueMap():获取顶点、边的属性。

valueMap()properties()不同的地方是:它们返回的结构不一样,后者将所有的属性扁平化到一个大列表中,一个元素代表一个属性;前者保持一个顶点或一条边的属性作为一组,每一组由若干属性的键值对组成。

示例:

  1. // 查询所有顶点的属性
  2. g.V().valueMap()
  3. // 查询所有边的属性
  4. g.E().valueMap()

properties()返回的结果:

  1. {
  2. "id": "e56f6436-c01b-4162-a130-e277ebf929e4",
  3. "data": [
  4. // 扁平化的列出所有顶点的所有属性
  5. {
  6. "id": "okram>name",
  7. "value": "Marko A. Rodriguez",
  8. "label": "name"
  9. },
  10. {
  11. "id": "okram>age",
  12. "value": 29,
  13. "label": "age"
  14. },
  15. {
  16. "id": "okram>addr",
  17. "value": "Santa Fe, New Mexico",
  18. "label": "addr"
  19. },
  20. {
  21. "id": "okram>weight",
  22. "value": 1.0,
  23. "label": "weight"
  24. },
  25. {
  26. "id": "dalaro>name",
  27. "value": "Dan LaRocque ",
  28. "label": "name"
  29. },
  30. {
  31. "id": "dalaro>age",
  32. "value": 0,
  33. "label": "age"
  34. },
  35. {
  36. "id": "dalaro>addr",
  37. "value": "",
  38. "label": "addr"
  39. },
  40. {
  41. "id": "dalaro>weight",
  42. "value": 1.0,
  43. "label": "weight"
  44. }
  45. ],
  46. "type": "OTHER",
  47. "duration": "48",
  48. "showNum": 47,
  49. "message": "",
  50. "graph": {
  51. "vertices": [],
  52. "edges": [],
  53. "styles": {}
  54. }
  55. }

valueMap()返回的结果:

  1. {
  2. "id": "30e89152-b4f2-4f3d-8bba-06041927c53f",
  3. "data": [
  4. // 按顶点做了分组,每一组就是一个顶点,内部为这个顶点的所有属性
  5. {
  6. "name": [
  7. "Marko A. Rodriguez"
  8. ],
  9. "age": [
  10. 29
  11. ],
  12. "addr": [
  13. "Santa Fe, New Mexico"
  14. ],
  15. "weight": [
  16. 1.0
  17. ]
  18. },
  19. {
  20. "name": [
  21. "Dan LaRocque "
  22. ],
  23. "age": [
  24. 0
  25. ],
  26. "addr": [
  27. ""
  28. ],
  29. "weight": [
  30. 1.0
  31. ]
  32. }
  33. ],
  34. "type": "OTHER",
  35. "duration": "27",
  36. "showNum": 12,
  37. "message": "",
  38. "graph": {
  39. "vertices": [],
  40. "edges": [],
  41. "styles": {}
  42. }
  43. }

values()

Step values():获取顶点、边的属性值

示例:

  1. // 查询所有顶点的属性值
  2. // 效果等同于 g.V().properties().value()
  3. g.V().values()
  4. // 查询所有顶点的"lang"属性
  5. // 效果等同于 g.V().properties('lang').value()
  6. g.V().values('lang')
  7. // 查询所有边的属性值
  8. g.E().values()