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

问题描述 投票:0回答:1

我有一个场景,我必须检查具有不同标签的多个顶点,并在父顶点下匹配它们的属性。如果一切都匹配正确,则返回父顶点。

我尝试使用'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')

请引导我走正确的道路

graph azure-cosmosdb gremlin tinkerpop3
1个回答
0
投票

你绝对可以简化你的方法。我不认为你需要步骤标签和select()你正在做什么是好的,因为它们增加了你的遍历成本。我试图重新编写你提供的第一次遍历,我希望我的逻辑是正确的,但不管怎样,我认为当你看到变化时,你会明白你需要做什么:

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

你已经想要在第一行返回“父”,所以只需使用where()进行过滤,并在那里添加过滤逻辑,以便从每个“父母”中移出。

© www.soinside.com 2019 - 2024. All rights reserved.