如何在 gremlin 中过滤 select 之后?

How can I filter after select in gremlin?

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

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

该列表包含标签为 'topic' 的顶点。

我正在尝试进行遍历以查找在上述变量中​​具有相同主题的内容。

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]}
...

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

我不知道如何使用过滤器或在哪里进行过滤。任何帮助表示赞赏。

谢谢!

如果您需要变量 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')

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