我们可以同时过滤多个标签吗

时间:2018-09-12 18:35:19

标签: graph azure-cosmosdb gremlin tinkerpop3

我有一种情况,我必须检查具有不同标签的多个顶点,并在父顶点下匹配它们的属性。然后,如果一切都很好,则返回父顶点。

我尝试用'and'子句和'where'子句编写查询,但没有一个起作用:

这是我的审判:

g.V().hasLabel('schedule').inE().outV().hasLabel('url').as('a').outE().inV().aggregate('x').hasLabel('schedule').has('name', '3').as('b').select('x').hasLabel('states').has('name', 'federal').as('c').select('a')

g.V().hasLabel('schedule').inE().outV().hasLabel('url').as('a').outE().where(inV().hasLabel('schedule').has('name', '3')).where(inV().hasLabel('states').has('name', 'federal')).select('a')

g.V().hasLabel('schedule').inE().outV().hasLabel('url').as('a').outE().and(inV().hasLabel('schedule').has('name', '3'),inV().hasLabel('states').has('name', 'federal')).select('a')

g.V().hasLabel('schedule').inE().outV().hasLabel('url').as('a').outE().inV().aggregate('x').hasLabel('schedule').has('name', '3').as('b').select('x').unfold().hasLabel('states').has('name', 'federal').as('c').select('a')

请引导我走正确的路

1 个答案:

答案 0 :(得分:0)

您绝对可以简化您的方法。我认为您不需要执行步骤标签和select()就可以了,因为这样做会增加遍历的成本,所以这样做并不好。我试图重新编写您提供的第一个遍历,但我希望我的逻辑正确,但是不管怎么说,我认为您会明白在看到更改时需要做什么:

g.V().hasLabel('schedule').in().hasLabel('url').
  where(and(out().hasLabel('schedule').has('name', '3'),
            out().hasLabel('states').has('name', 'federal')))

您已经有了要在第一行中返回的“父”,因此只需使用where()进行过滤,然后在其中添加过滤逻辑即可遍历每个“父”。