내부적으로 Neo4j는 모든 ID를 java.lang.Long
개체로 저장합니다. 이것은 id
속성에 대해서만 특별한 동작입니다. 다른 모든 속성은 함축 된 데이터 형식과 함께 저장됩니다. 이것이 has('name', 'VerisignCzagExtension')
이 작동하는 이유입니다 () name
속성은 id
에 해당하는 특수한 동작에서 제외 되었기 때문입니다. 나는 v5086
이 java.lang.Long
으로 형 변환되고 있다고 가정하고있어 실제 값을 잃어 버렸습니다. 그것은 has('id', 'v5086')
Gremlin 단계 후에 0 결과를 설명 할 수 있습니다.
AFAIK, id
속성을 변경할 수 없습니다 (은 변경할 수 없습니다.). has
Gremlin 단계를 사용하여 id
을 정점을 찾아야하는 경우 과 같을 것입니다. 정점 id
이 5086
이고 java.lang.Long
값으로 저장되어 있다고 가정합니다. L
은 명시 적으로 java.lang.Long
타입 캐스팅을위한 것이고, Neo4j는 L
을 추가하지 않으면 Neop4j가 java.lang.Integer
이라고 가정하고 Gremlin 단계는 결과가 0이됩니다.
마지막으로, name
키가있는 속성처럼 이름이 지정된 ID를 다른 것으로 호출 할 수 있습니다.
희망이 도움이됩니다.
사용중인 데이터 저장소 (Neo4j, OrientDb, TinkerGraph 등)에 더 자세한 정보를 제공 할 수 있습니까? AFAIK,'id'는 예약 된 속성이며 일반적으로 숫자입니다. 'id'가 각 노드/에지 추가로 자동 증가되는 기존의'id' 속성과 충돌하지 않습니까? – rhetonik
Neo4j 1.8을 사용하고 있고 사이퍼 쿼리 내에서 id 속성을 사용 했으므로 Neo4j의 항목과 충돌하지 않는다고 가정합니다. gremlin이 사용하는 id와 충돌하는지는 잘 모르겠지만. 그것이 흥미로운 부분이라면 그 속성을 요구할 때 여전히 내가 제공 한 가치를 제공한다는 것입니다. 더 나은 질문은 속성 함수에서 올바른 값을 반환한다고 가정하면 속성에서 반환 한 값을 사용하는 비슷한 함수가 있습니까? – user1690293