2017-11-18 17 views
2

Tinkerpop/Gremlin의 recipes 섹션에서 아래 명령은 노드의 깊이를 계산하는 데 사용됩니다. 이 명령은 노드 자체를 계산하여 노드의 깊이를 계산합니다. 그러나 리프 노드에서이 명령을 실행하면 가비지 값이 1 대신 반환됩니다. 누군가이 문제에 대해 명확하게 설명해 주시겠습니까?리프 노드의 깊이가 왜 아닌 가비지 값입니까?

명령 :

g.V().has('name','F').repeat(__.in()).emit().path().count(local).max() 

'F'는 다음이 잘못된 값을 반환 잎 노드 인 경우. 나는 그것이 maximum depth recipe에서 동일한 데이터를 사용하여 1

답변

2

을 반환해야한다고 생각, 여기에 결과의 일부입니다 :

gremlin> g.V().has('name', 'F').repeat(__.in()).emit().path().count(local).max() 
==>5 
gremlin> g.V().has('name', 'C').repeat(__.in()).emit().path().count(local).max() 
==>3 
gremlin> g.V().has('name', 'A').repeat(__.in()).emit().path().count(local).max() 
==>-2147483648 
우리는 지난 몇 단계를 제거하여 행동에 대해 자세히 알아볼 수 있습니다

:

gremlin> g.V().has('name', 'C').repeat(__.in()).emit().path() 
==>[v[4],v[6]] 
==>[v[4],v[2]] 
==>[v[4],v[2],v[0]] 
gremlin> g.V().has('name', 'A').repeat(__.in()).emit().path() 
gremlin> 

'C'에는 3 개의 경로가 있고 'A'에는 0 개의 경로가 있음을 볼 수 있습니다. 이것은 모든 사람이 방출되기 전에 살해 당했기 때문입니다. 당신이 repeat() 단계 전에 emit() 단계를 이동하는 경우, 당신은 당신의 원하는 동작을 얻을 것이다 :

gremlin> g.V().has('name', 'A').emit().repeat(__.in()).path() 
==>[v[0]] 
gremlin> g.V().has('name', 'A').emit().repeat(__.in()).path().count(local).max() 
==>1 

당신은 repeat() 단계와 TinkerPop documentationemit() 단계와의 상호 작용에 대한 자세한 내용을보실 수 있습니다. emit()repeat() 뒤에 위치

경우, 반복-통과를 떠나는 횡단에 평가 : 구체적으로 명시 콜 아웃 상자가있다. emit()repeat() 앞에 놓이는 경우, 반복 - 순회를 입력하기 전에 트래 버에 대해 평가됩니다.

+0

멋진 작품입니다. 이 경우에 emit()의 배치가 어떻게 바뀌 었는지 이해하려면 설명서 나 기타 리소스를 가르쳐 주시겠습니까? 나는 모든 traversers가 방사되기 전에 당신이 의미했던 것을 이해하려고 노력하고 있습니다. – livetolearn

+0

은'repeat()'와'emit()'에 대한 정보를 더합니다. 문서에서 더 많은 개선이 필요하다고 생각되면 [문제를 열어주세요.] (https://issues.apache.org/jira/projects/TINKERPOP/issues). –