【发布时间】:2018-01-11 15:39:38
【问题描述】:
我在图中有树形数据结构,如下图所示。每种颜色代表具有不同标签的节点,其关系如员工 -> 应用程序 -> 项目 -> pv -> 扫描)。
问题 #1:
我想找到顶部节点 0 的所有叶节点(绿色的)。
我尝试了下面的循环代码,它返回所有带有员工标签的节点。不仅仅是叶节点。
g.V().has('person', 'id', '0').repeat(__.in('reportsTo')).emit().values('id')
示例图可以在gremlinbin 中找到。
如何找到所有绿色叶子节点?
更新 #1:
正如 cmets 中提到的,我尝试了树形模式。但它不允许我在树上调用 getLeafObjects() 。不确定缺少什么。此外,我再次只能创建员工节点树。如何遍历扫描节点?
> tree = g.V().has('person', 'id', '0').repeat(__.in('reportsTo')).emit().tree()
> tree.getLeafObjects()
No signature of method: org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal.getLeafObjects() is applicable for argument types: () values: []
问题 #2:
如何根据 max(id) 在每个父级下的子级中检索子级顶点?所以在我的示例图中,每个黑色顶点都可以有一个或多个绿色子顶点。我想在每个黑色顶点下找到具有 max(property) 的绿色顶点。
【问题讨论】:
-
这些都是扫描。这就是你对“绿色”的定义吗?该扫描列表首先是您输入的一部分。您可以简单地查询顶点的标签。
-
如果我想找到根目录下的所有扫描节点,这将起作用。但如果我想查找特定员工节点下的所有扫描节点而不仅仅是根节点,它就行不通了。
-
github.com/tinkerpop/gremlin/wiki/Tree-Pattern 可能会帮助你有一个帮助方法来获取叶子。
标签: gremlin tinkerpop janusgraph