连接图数据库GDB实例后,您可以通过数据管理DMS或GDB开源可视化控制台GDB Console对创建好的图数据库进行查询和分析。

目前图数据库GDB支持Gremlin和OpenCypher两种查询语言,您可以根据购买的内核版本选择不同的查询语言进行图查询和分析。

前提条件

已根据快速入门完成登录数据库步骤,具体操作,请参见登录数据库

Gremlin

以下示例语句适用于内核版本为Gremlin的图数据库GDB实例。

点查询

  • 统计点的数量。
    g.V().count()
  • 统计每种类型点的数量。
    g.V().group().by(label).by(count())
    g.V().groupCount().by(label)
  • 查询所有点。
    g.V().limit(100)
  • 查询指定标签的点。
    g.V().hasLabel('person')
  • 根据点ID查询点。
    g.V('123')
  • 按属性过滤点。
    g.V().has('name','张三')

边查询

  • 统计边的数量。
    g.E().count()
  • 统计每种类型边的数量。
    g.E().group().by(label).by(count())
  • 查询所有边。
    g.E()
  • 查询指定标签的边。
    g.E().hasLabel('connect')
  • 根据边ID查询边。
    g.E('12')
  • 查询点所关联的边。
    g.V('123').outE('connect')
  • 查询路径。
    g.V('123').outE('connect').path()

属性查询

  • 查询点的属性。
    g.V('123').valueMap(true)

排序查询

  • 按照属性字段进行排序。
    g.V().has('name','张三').outE('connect').order().by('weight', decr).valueMap(true)

新增点

  • 新增点。
    g.addV('person').property(id,'23').property('name','李四')

删除点

  • 删除指定点。
    g.V('123').drop()
  • 根据属性删除点。
    g.V().has('person').property('age', values('18')).drop()
  • 分批删除所有点。
    g.V().drop().limit(1024)

新增边

  • 新增边。
    g.addE('connect').property('weight', '4').from(g.V('12')).to(g.V('16'))

删除边

  • 删除边。
    g.E('23').drop()

OpenCypher

以下示例语句适用于内核版本为OpenCypher的图数据库GDB实例。

点查询

  • 统计点的数量。
    MATCH (n) return count(n)
  • 统计每种类型点的数量。
    MATCH (n) return labels(n), count(*)
  • 查询所有点(不建议使用)。
    MATCH (n) return n limit 10
  • 查询指定标签的点。
    MATCH (n:person) return n
  • 按属性过滤点。
    MATCH (n:person {firstName: "Carlos"}) return n;

边查询

  • 统计边的数量。
    MATCH (n)-[r]->(m) return count(r)
  • 统计每种类型边的数量。
    MATCH (n)-[r]->(m) return type(r), count(*)
  • 查询所有边。
    MATCH (n)-[r]->(m) return r
  • 查询指定标签的边。
    MATCH (n)-[r:knows]->(m) return r
  • 根据边属性查询边。
    MATCH (n)-[r:knows {creationDate:1274809046847}]->(m) return r
  • 查询点所关联的边。
    MATCH (n:person {firstName: "Carlos"})-[r]->(m) return r
  • 查询路径。
    MATCH p=(n:person {firstName: "Carlos"})-[r]->(m) return p

属性查询

  • 查询点的属性。
    MATCH (n:person {firstName: "Carlos"}) return properties(n) limit 2;

排序查询

  • 按照属性字段进行排序。
    MATCH (n:person {firstName: "Mahinda"})-[r]-(m) return m order by m.locationIP

新增点

  • 新增点。
    CREATE (n:Person {name: 'Andy', title: 'Developer'})

删除点

  • 删除指定点。
    MATCH (n:Person {name: 'tom'})
    DELETE n
  • 根据属性删除点。
    MATCH (a {name: 'Andy'})
    REMOVE a.age
    RETURN a
  • 分批删除所有点。
    MATCH (n:Person )
    DELETE n
    LIMIT 10

新增边

  • 新增边。
    MATCH
      (a:Person),
      (b:Person)
    WHERE a.name = 'A' AND b.name = 'B'
    CREATE (a)-[r:RELTYPE]->(b)
    RETURN type(r)

删除边

  • 删除边。
    MATCH (n {name: 'Andy'})-[r:KNOWS]->()
    DELETE rg.E('23').drop()