나는 cypher를 사용하여 neo4j에서 일련의 데이터 노드를 유지하려고합니다. 그래서 현재 날짜와 타임 스탬프가있는 노드를 만듭니다. 또한 현재 노드와 가장 최근의 노드 사이에 연결을 만들어야합니다. 그래서 노드가있는 경우 노드가 이미 존재하는지 확인하고 최신 날짜가있는 노드를 가져와 (latest:Node)<-[:next]-(prev:Node)
을 만듭니다. 노드가 존재하지 않으면 현재 날짜가있는 노드를 만듭니다. 감사합니다.최근 날짜가 있고 현재 노드와의 연결을 생성하는 neo4j 노드 (있는 경우)를 얻는 방법은 무엇입니까?
답변
가장 최근 노드를 가리키는 어떤 종류의 헤드 노드가있는 경우 유지 관리가 더 쉽습니다. 이렇게하면 가장 최근 노드를 빠르게 찾을 수있을뿐만 아니라 (목록에 몇 개의 노드가 있더라도 일정 시간이 유지됨)이 목록에 대한 동시 변경을 조정하는 데 도움이됩니다.
다음과 같이 머리글 노드를 가정합니다. 가장 최근 노드와 최근 관계. 동시 쿼리가 실행될 때 경쟁 조건을 피하기 위해 가장 최근의 노드를 확인하기 전에 Head 노드를 잠글 필요가 있습니다.
가장 쉬운 방법은 APOC Procedures과 call apoc.lock.nodes()
입니다.
// assume `latest` node with latest timestamp is already created and in scope
WITH latest
MATCH (head:Head)
CALL apoc.lock.nodes([head]) // avoid race conditions
OPTIONAL MATCH (head)-[r:LATEST]->(prev)
WITH latest, head, r, prev // this + the WHERE needed to halt query if latest isn't newer than prev
WHERE COALESCE(prev.timestamp, 0) < latest.timestamp
DELETE r // update :LATEST relationship
MERGE (head)-[:LATEST]->(latest)
WITH latest, prev
WHERE prev IS NOT NULL // protects from error in case when prev is null
MERGE (latest)<-[:next]-(prev)
새로 만든 노드는 현재 가장 최근의 노드 때이 작동하는 동안 것으로,이
prev
보다 최신없는 노드에 대해 작동하지 않습니다 유의하십시오. 이 경우 목록에 추가되지 않습니다. 목록의 적절한 위치에 노드를 삽입하기 위해 쿼리를 수정해야합니다.
고마워! 만약 우리가 처음으로 노드를 생성한다면, 이전 노드가 없다 (최신). 또한 많은 노드가 없어 복잡성이 문제가되지 않습니다. 감사합니다 – Neo
이전 노드가 없어도 쿼리가 작동해야합니다 (헤드 노드가 필요합니다.) – InverseFalcon
Thanks #InverseFalcon. 작동합니다. – Neo
- 1. 노드와의 클라이언트 연결을 구별 할 수 있습니까?
- 2. 경로 (Neo4j)에서 노드 속성의 총 값을 얻는 방법은 무엇입니까?
- 3. TCP 반 연결을 생성하는 클라이언트의 IP 주소를 얻는 방법은 무엇입니까?
- 4. Asp.net 코어에서 NEO4J db 연결을 분리하는 방법은 무엇입니까? NEO4J 드라이버
- 5. Neo4j - 특성에 따라 노드 추출
- 6. neo4j 노드에 대해 java에서 uuid를 생성하는 가장 좋은 방법은 무엇입니까
- 7. 오디오 장치가 꽂혀 있고 플러그가 뽑혀있는 경우를 감지하는 방법은 무엇입니까?
- 8. JDBC : 현재 연결을 얻는 방법?
- 9. py2neo에서 자동 노드 ID를 얻는 방법은 무엇입니까?
- 10. 현재 시간대를 얻는 방법은 무엇입니까?
- 11. Neo4j 노드 간 관계
- 12. Neo4j 노드 생성
- 13. Neo4J REST 고유 노드
- 14. 현재 노드의 부모 노드 이름을 얻는 방법은 무엇입니까?
- 15. 셀의 날짜가 같은 월과 연도가있는 경우를 계산하십시오.
- 16. NSDate에서 날짜가 아닌 시간을 얻는 방법은 무엇입니까?
- 17. Neo4j 노드 시각화
- 18. 노드 집합 사이의 연결을 찾는 방법은 무엇입니까?
- 19. LINQ가 최근 날짜가 람다에 합류합니다
- 20. Neo4J, 일치와 노드 "OR"
- 21. 시스템에서 모든 ODBC 연결을 얻는 방법은 무엇입니까?
- 22. 노드 필터 아래 NEO4J 노드
- 23. 청사진을 사용하여 neo4j DB의 모든 관계 유형을 얻는 방법은 무엇입니까?
- 24. 현재 ProcessID를 얻는 방법은 무엇입니까?
- 25. 현재 디렉토리를 얻는 방법은 무엇입니까?
- 26. 현재 routeName을 얻는 방법은 무엇입니까?
- 27. Drupal 6에서 노드 ID별로 이미지 경로를 얻는 방법은 무엇입니까?
- 28. nginx에서 현재 작업자 연결을 사용하는 방법은 무엇입니까?
- 29. Neo4j 무비 데이터베이스에있는 두 노드 사이의 연결을 찾으십시오.
- 30. 현재 Ajax 연결을 중지하고 새 Ajax 연결을 시작하는 방법은 무엇입니까?
만들기 전에 확인한 내용에 대해 자세히 설명해 주실 수 있습니까? 기본적으로, 나는 어딘가에'선택 사항 (x : SomeLabel)의 행을 따라 x가 x가 아닌 NULL이 생성된다 ... ' –