Tinkerpop : 속성이있는 정점에 대한 경로가없는 정점 선택

Aug 21 2020

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태그 정점에 연결되지 않은 모든 정점 을 선택하고 싶습니다 . 출력은 2 개의 정점이어야합니다.tagKeytagKey2user3 , user 1

답변

1 codetiger Aug 21 2020 at 15:55

태그에 연결되지 않은 Vertex를 가져 오는 쿼리입니다.

g.V().hasLabel("Vertex").
    filter(
        not(outE().hasLabel('connected'))
        ).
    properties()

Vertex 데이터를 추가하기위한 질의 :

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 링크 : https://gremlify.com/f1muf12xhdv/2

1 noam621 Aug 21 2020 at 15:58

당신의 조합을 사용하여이를 달성 할 수 notwhere단계를 :

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

예: https://gremlify.com/jybeipj4zjg