Mah*_*Gvp 3 gremlin tinkerpop tinkerpop3
获取具有相同属性键的值的最佳方法是什么?
编辑:很抱歉更改问题,我的要求是从任一部门获得一名员工
我需要获取为IT或销售部门工作的所有员工,并由ID为123的经理进行管理.
我用过
g.V().has('managerId',123).out('manages').as('employee')
.out('worksFor').has('departmentName','IT','Sales')
.select('employee')
Run Code Online (Sandbox Code Playgroud)
其中out('worksAt')给人部门.
我们可以在一个has()步骤中执行此操作,还是应该使用union()步骤
g.V().has('managerId',123).out('manages').as('employee').out('worksFor')
.union(__.has('departmentName','IT'),__.has('departmentName','Sales')
.select('employee')
Run Code Online (Sandbox Code Playgroud)
这是一个示例图:
gremlin> graph = TinkerGraph.open()
==>tinkergraph[vertices:0 edges:0]
gremlin> g = graph.traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV("managerId",123).as("manager").
......1> addV("employee","A").as("A").
......2> addV("employee","B").as("B").
......3> addV("department", "IT").as("it").
......4> addV("department", "Sales").as("sales").
......5> addE("manages").from("manager").to("A").
......6> addE("manages").from("manager").to("B").
......7> addE("worksFor").from("A").to("it").
......8> addE("worksFor").from("B").to("it").
......9> addE("worksFor").from("A").to("sales").iterate()
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我这样做是为了让员工A同时处于"销售"和"IT",但员工B只处于"IT"状态.既然您说过希望在两个部门工作的员工,那么员工A应该从查询中返回,而B应该被过滤掉.
请注意,within在这种情况下使用产生错误的答案:
gremlin> g.V().has('managerId',123).
......1> out('manages').
......2> where(out('worksFor').
......3> has('department',within('IT','Sales'))).
......4> valueMap()
==>[employee:[A]]
==>[employee:[B]]
Run Code Online (Sandbox Code Playgroud)
如果你想要两个部门,这是方法:
gremlin> g.V().has('managerId',123).
......1> out('manages').
......2> where(out('worksFor').
......3> has('department','Sales')).
......4> where(out('worksFor').
......5> has('department','IT')).
......6> valueMap()
==>[employee:[A]]
Run Code Online (Sandbox Code Playgroud)
您可能只缺少within谓词,这也在hasTinkerPop文档中的步骤的上下文中进行了解释:
g.V().has('managerId',123).out('manages').as('employee').out('worksFor').
has('departmentName',within('IT','Sales')).select('employee')
Run Code Online (Sandbox Code Playgroud)
编辑:阅读斯蒂芬的回答后,我注意到,我念了一遍,并在你的问题:
为IT 和销售工作的员工
这使我的答案当然无效.我仍然留在这里,以防你真正意味着或者你后来使用这个union步骤所表明的.
| 归档时间: |
|
| 查看次数: |
1851 次 |
| 最近记录: |