Gremlin Tinkerpop:选择没有指向具有属性的顶点的路径的顶点

Gremlin Tinkerpop:选择没有指向具有属性的顶点的路径的顶点,gremlin,tinkerpop,tinkerpop3,gremlin-server,tinkergraph,Gremlin,Tinkerpop,Tinkerpop3,Gremlin Server,Tinkergraph,在Tinkerpop中,我想选择那些与属性foo等于bar 例如: Vertex user1 = graph.addVertex("vid","one"); Vertex user2 = graph.addVertex("vid","two"); Vertex user3 = graph.addVertex("vid","three"); Vertex tag1 = grap

在Tinkerpop中,我想选择那些与属性
foo
等于
bar

例如:

Vertex user1 = graph.addVertex("vid","one");
Vertex user2 = graph.addVertex("vid","two");
Vertex user3 = graph.addVertex("vid","three");

Vertex tag1 = graph.addVertex("tagKey", "tagKey1");
Vertex tag2 = graph.addVertex("tagKey", "tagKey2");
Vertex tag3 = graph.addVertex("tagKey", "tagKey3");

user1.addEdge("user_tag", tag1);
user2.addEdge("user_tag", tag2);
user2.addEdge("user_tag", tag3);

在上面的测试用例中,我想选择所有
user
顶点,这些顶点没有连接到
tagKey
值为
tagKey2
的标记顶点。输出应为2个顶点
user3,用户1
查询以获取未连接到标记的顶点

g.V().hasLabel("Vertex").
    filter(
        not(outE().hasLabel('connected'))
        ).
    properties()
要添加顶点数据的查询:

g.addV('Vertex').as('1').property(single, 'name', 'One').
  addV('Vertex').as('2').property(single, 'name', 'Two').
  addV('Vertex').as('3').property(single, 'name', 'Three').
  addV('Vertex').as('4').property(single, 'name', 'Four').
  addV('Tag').as('5').property(single, 'name', 'Key1').
  addV('Tag').as('6').property(single, 'name', 'Key2').
  addV('Tag').as('7').property(single, 'name', 'Key3').
  addE('connected').from('1').to('5').
  addE('connected').from('2').to('6').
  addE('connected').from('4').to('7')

Gremlify link:

您可以通过结合使用
not
where
步骤来实现这一点:

g.V().hasLabel('User').
  not(where(out('user_tag').has('tagKey', 'tagKey2'))).
  valueMap().with(WithOptions.tokens)
例如: