【问题标题】:Gremlin find all connected Vertices over n levelsGremlin 在 n 层上找到所有连接的顶点
【发布时间】:2018-03-12 00:14:34
【问题描述】:

我基本上是在尝试在所有连接的顶点中搜索节点类型,Cypher 查询版本给了我预期的结果,但 Gremlin 版本没有给我预期的结果。我做错了什么??

我的数据的可视化表示

Cyher 查询以获取所有连接

MATCH p=shortestPath((n:Process)-[*]-(m:Process)) 
WHERE n <> m 
RETURN ID(n), n, ID(m), m, length(p)

小鬼版本

gremlin> g.V().hasLabel('Process')
.repeat(both().simplePath())
.until(hasLabel('Process'))
.path().by('title')

==>[Cash Processing,Accounting]
==>[Cash Processing,Sales]
==>[Sales,Marketing]
==>[Sales,Cash Processing]
==>[Marketing,Accounting]
==>[Marketing,Sales]
==>[Accounting,Cash Processing]
==>[Accounting,Marketing]

知道为什么 Gremlin 没有捕捉到“现金处理”->“销售”->“营销”连接吗?

我觉得需要对 until() 函数进行更改,但不知道是什么

【问题讨论】:

  • 在向 Gremlin 提问时,分享一个创建示例数据的 Gremlin 脚本总是很有帮助的。这允许其他人使用您的数据并更好地理解您的问题。例如看这个问题:stackoverflow.com/questions/49038920/…

标签: gremlin tinkerpop3


【解决方案1】:

您没有谈论顶点的标签,但对我来说,Sales 顶点似乎已经满足 until(HasLabel('Process')) 停止条件。

您的 Cypher 查询的正确翻译应该是这样的:

g.V().hasLabel('Process').as('n').
  repeat(both().simplePath()).
    emit(hasLabel('Process')).as('m').
  dedup('n','m').
  path().count(local).as('len').
  select('m','n','len')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    • 2023-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多