Cypher WITH

김무성·2022년 4월 11일
0

Cypher

목록 보기
3/3

WITH

1. Introduction

  • WITH를 사용하면 다음 쿼리 부분으로 전달되기 전에 출력을 조작할 수 있고, 결과 집합의 항목 수 및/또는 모양을 조작할 수 있음

  • WITH의 일반적인 용도

    • 다른 MATCH 절에 전달되는 항목 수를 제한
      ORDER BY와 LIMIT를 결합하면 몇 가지 기준에 따라 상위 X개 항목을 가져온 다음 그래프에서 추가 데이터를 가져올 수 있음

    • 다음 쿼리 부분에서 사용할 표현식의 결과를 포함하는 새 변수를 도입하는 데 사용할 수 있음
      편의상 와일드카드 *는 현재 범위에 있는 모든 변수로 확장되어 다음 쿼리 부분으로 전달 됨

    • 집계된 값을 필터링
      WITH는 WHERE의 술어에서 사용할 수 있는 집계를 도입하는 데 사용되며 이러한 집계 식은 결과에 새 바인딩을 만듬

    • 판독값을 그래프 업데이트와 분리하는데 사용
      쿼리의 모든 부분은 읽기 전용이거나 쓰기 전용이어야 하며 쓰기 부분에서 읽기 부분으로 이동할 때 반드시 WITH 절로 전환해야 함

2. Introducing variables for expressions

  • 표현식 평가 결과에 대해 새로운 변수를 도입할 수 있음
MATCH (george {name: 'George'})<--(otherPerson)
WITH otherPerson, toUpper(otherPerson.name) AS upperCaseName
WHERE upperCaseName STARTS WITH 'C'
RETURN otherPerson.name
  • 이 쿼리는 대문자에 관계없이 이름이 C로 시작하는 'George'와 연결된 사람의 이름을 반환

3. Using the wildcard to carry over variables

  • 와일드카드 *를 사용하여 새 변수를 도입하는 것 외에도 범위에 있는 모든 변수를 전달할 수 있음
MATCH (person)-[r]->(otherPerson)
WITH *, type(r) AS connectionType
RETURN person.name, otherPerson.name, connectionType
  • 이 쿼리는 관련된 모든 사람의 이름과 이들 간의 관계 유형을 반환

4. Filter on aggregate function results

  • 집계된 결과는 필터링할 수 있으려면 WITH 절을 통과해야 함
MATCH (david {name: 'David'})--(otherPerson)-->()
WITH otherPerson, count(*) AS foaf
WHERE foaf > 1
RETURN otherPerson.name
  • 둘 이상의 나가는 관계로 'David'와 연결된 사람의 이름이 쿼리에 의해 반환

5. Sort results before using collect on them

  • 수집하기 위해 전달하기 전에 결과를 정렬할 수 있고, 결과 목록을 정렬할 수 있음
MATCH (n)
WITH n
ORDER BY n.name DESC
LIMIT 3
RETURN collect(n.name)
  • 사람의 이름을 역순으로 나열한 목록(3개로 제한됨)이 목록으로 반환
  • 경로를 일치시키고 특정 수로 제한한 다음 해당 경로를 기반으로 사용하여 다시 일치시킬 수 있을 뿐만 아니라 유사한 제한된 검색을 원하는 수만큼 사용할 수 있음
MATCH (n {name: 'Anders'})--(m)
WITH m
ORDER BY m.name DESC
LIMIT 1
MATCH (m)--(o)
RETURN o.name
  • Anders'에서 시작하여 일치하는 모든 노드를 찾고 이름 내림차순으로 정렬하여 최상위 결과를 얻은 다음 해당 최상위 결과에 연결된 모든 노드를 찾아 이름을 반환

Reference

profile
graph data scientist

0개의 댓글