在gremlin中选择后如何过滤?

时间:2019-09-20 01:27:04

标签: gremlin janusgraph gremlin-server

我已经在一个变量中保存了一个顶点列表。

tv = g.V().hasLabel('user').has('name', 'xxyy').out().out().dedup().toList()

该列表包含带有标签“主题”的顶点。

我正在尝试遍历以在上面的变量中找到具有相同主题的内容。

g.V().hasLabel('user').has('name', 'xxyy').out().in().hasLabel('influencer')
.dedup().out().hasLabel('content').as('content').out().as('topic')
.select('content', 'topic')
==>{content=v[22663384], topic=v[23412864]}
==>{content=v[22663384], topic=v[23412864]}
==>{content=v[22663384], topic=v[23445624]}
==>{content=v[22663384], topic=v[23445624]}
==>{content=v[22663384], topic=v[23548032]}
==>{content=v[22663384], topic=v[23548032]}
==>{content=v[22663384], topic=v[23597056]}
==>{content=v[22663384], topic=v[23597056]}
==>{content=v[22663384], topic=v[24039672]}
==>{content=v[22663384], topic=v[24039672]}
==>{content=v[22663384], topic=v[64716880]}
==>{content=v[22663384], topic=v[64716880]}
==>{content=v[22663384], topic=v[65163456]}
...

这将给出所有内容对及其主题。我只想要主题在电视内的内容顶点。

我无法弄清楚如何使用过滤器或在哪里进行过滤。任何帮助表示赞赏。

谢谢!

1 个答案:

答案 0 :(得分:2)

如果您还需要变量tv,那么第二个查询将是:

g.V().hasLabel('user').has('name', 'xxyy').
   out().in().hasLabel('influencer').
   dedup().
   out().hasLabel('content').as('content').
   out().is(within(tv)).as('topic').
   select('content', 'topic')

但是,如果tv的唯一目的是成为过滤器变量,则无需这样做。您可以在一个查询中完成所有操作:

g.V().hasLabel('user').has('name', 'xxyy').
   out().sideEffect(out().aggregate('tv')).barrier().
   in().hasLabel('influencer').
   dedup().
   out().hasLabel('content').as('content').
   out().where(within('tv')).as('topic').
   select('content', 'topic')

顺便说一句:您应该始终在遍历中指定边缘标签。