我有一种情况,我必须检查具有不同标签的多个顶点,并在父顶点下匹配它们的属性。然后,如果一切都很好,则返回父顶点。
我尝试用'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')
请引导我走正确的路
答案 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()
进行过滤,然后在其中添加过滤逻辑即可遍历每个“父”。