如何在gremlin中搜索同一propertykey的多个值

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)

ste*_*tte 6

这是一个示例图:

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)


Flo*_*ann 5

您可能只缺少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步骤所表明的.