我有一个场景,我必须检查具有不同标签的多个顶点,并在父顶点下匹配它们的属性。如果一切都匹配正确,则返回父顶点。
我尝试使用'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')
请引导我走正确的道路
你绝对可以简化你的方法。我不认为你需要步骤标签和select()
你正在做什么是好的,因为它们增加了你的遍历成本。我试图重新编写你提供的第一次遍历,我希望我的逻辑是正确的,但不管怎样,我认为当你看到变化时,你会明白你需要做什么:
g.V().hasLabel('schedule').in().hasLabel('url').
where(and(out().hasLabel('schedule').has('name', '3'),
out().hasLabel('states').has('name', 'federal')))
你已经想要在第一行返回“父”,所以只需使用where()
进行过滤,并在那里添加过滤逻辑,以便从每个“父母”中移出。