Gremlin 的基本用法
Gremlin Query Language 的基本用法主要包括构建图遍历的查询语句,这些语句由一系列的步骤组成,用于从图形中检索数据和修改数据。以下是一些基本用法的示例和解释:
-
选择所有顶点:
使用g.V()
可以选择图中的所有顶点。这里的g
是一个图的引用,而V()
是一个步骤,用于选择顶点。 -
获取顶点属性:
通过values()
步骤可以获取顶点的属性值。例如,g.V().values('name')
会获取所有顶点的 ‘name’ 属性值。 -
遍历关系:
Gremlin 允许你遍历图中的关系(边)。例如,g.V().out()
会获取所有顶点指向的出边对应的顶点。 -
过滤结果:
使用has()
步骤可以过滤顶点或边。例如,g.V().has('name', 'Alice')
会选择所有 ‘name’ 属性为 ‘Alice’ 的顶点。 -
排序结果:
使用order()
步骤可以对结果进行排序。例如,g.V().order().by('age', desc)
会根据 ‘age’ 属性值降序排序所有顶点。 -
限制结果数量:
range()
步骤可以用来限制返回结果的数量。例如,g.V().range(0, 5)
会返回前五个顶点。 -
添加和修改顶点及边:
Gremlin 也支持创建和修改图中的实体。例如,g.addV('person').property('name', 'Bob')
会添加一个名为 ‘Bob’ 的新顶点。 -
删除顶点及边:
使用drop()
步骤可以删除顶点或边。例如,g.V().has('name', 'Alice').drop()
会删除所有 ‘name’ 属性为 ‘Alice’ 的顶点。
在构建查询时,这些步骤可以组合在一起形成更复杂的查询。Gremlin 的流式执行特性使得查询语句非常灵活,可以轻松地满足各种查询需求。
如何快速练习 - Gremlify
要练习Gremlin 语言, 首选需要有一个Graph Db , 然后还需要有Client 端进行查询,这里提供一个在线练习的网站:
https://gremlify.com/。
Gremlify是一个用于构建和测试图数据库查询的在线平台。它支持 Apache TinkerPop Gremlin,这是一种用于遍历图数据的图遍历语言。Gremlify 提供了一个用户友好的界面,使开发者能够轻松地构建、测试和优化他们的 Gremlin 查询。
在 Gremlify 上,可以:
- 构建查询:使用直观的界面来构建 Gremlin 查询。无需编写复杂的代码,只需通过点击和选择操作即可创建查询。
- 实时测试:连接到你的图数据库实例(如 Neo4j、OrientDB、JanusGraph 等),并实时测试查询的结果。这有助于快速验证查询的正确性和性能。
- 优化建议:Gremlify 提供了优化建议,帮助你改进查询的性能。这些建议基于查询的结构和图数据库的特性。
- 分享和协作:你可以将查询分享给其他开发者,以便他们查看、修改或优化。这对于团队协作和知识共享非常有用。
- 学习资源:Gremlify 还提供了丰富的学习资源,包括教程、示例和文档,帮助你更好地理解和使用 Gremlin 语言。
总的来说,Gremlify 是一个强大的工具,可以简化图数据库查询的构建、测试和优化过程,提高开发者的效率和代码质量。
Gremlify 的基本使用步骤
- 在浏览器打开 https://gremlify.com/, 打开后的页面如下:
- 点击左边导航栏的"Graph Templates" 选择一个图数据
3.这里选择飞机路线的图数据
- 选择之后在最右边就显示了一个图。
图包括顶点和边。这里使用不同的ID进行标示。
- 在中间查询输入查询语句之后点击上方的"Run" 按钮运行。
这里 g.V()
是查询所有的顶点, 上面的顶点有5个,每个顶点有 id 和 label 两个属性。
- 查询示例
g.V("1193").out()
: 查询右上方 1193 顶点执行的顶点, 这里是1196 和1205, 返回结果:
[
{
"id": 1196,
"label": "airport"
},
{
"id": 1205,
"label": "airport"
}
]
g.V().id()
获取所有IDg.V().label()
获取所有label
这里示例的每个节点除了 id 和 label 之外, 还有一个名为code 的属性。
上面的查询并没有将 code 的值查询出来, 如何能查询出来呢?
g.V().values("属性名")
, 获取id 和label 之外的某个属性的值g.V().valueMap(true)
,返回所有顶点的所有属性名和属性值:
true
参数表示包含顶点的所有属性,包括那些值为空的属性。 返回结果类似:
[
{
"id": 1277,
"label": "airport",
"code": [
"AUS"
]
},
{
"id": 1280,
"label": "airport",
"code": [
"DFW"
]
},
{
"id": 1283,
"label": "airport",
"code": [
"LAX"
]
},
{
"id": 1286,
"label": "airport",
"code": [
"JFK"
]
},
{
"id": 1289,
"label": "airport",
"code": [
"ATL"
]
}
]
g.V().valueMap('propertyName1', 'propertyName2')
, 返回指定属性名g.V().has("code", "AUS")
:查询那些具有属性code
且其值为"AUS"
的所有顶点(vertices)
注意事项
id
和label
都是图元素的内置属性,但它们不是通过values()
步骤直接访问的。相反,应该使用id()
和label()
步骤来获取这些值。
参考
- https://gremlify.com/
- https://tinkerpop.apache.org/index.html