Azure Digital Twins 쿼리 언어 참조: MATCH 절

이 문서에는 Azure Digital Twins 쿼리 언어MATCH 절에 대한 참조 정보가 포함되어 있습니다.

MATCH 절은 Azure Digital Twins 쿼리 언어에서 FROM 절의 일부로 사용됩니다. MATCH를 사용하면 Azure Digital Twins 그래프에서 관계를 순회하는 동안 따라야 하는 패턴을 지정할 수 있습니다("변수 홉" 쿼리 패턴이라고도 함).

이 절은 쿼리하는 동안 선택 사항입니다.

핵심 구문: MATCH

MATCH는 특정 관계 조건에 따라 홉 범위 내에서 트윈 사이의 경로를 찾는 모든 쿼리를 지원합니다.

관계 조건에는 다음 세부 정보가 하나 이상 포함될 수 있습니다.

  • 관계 방향(왼쪽에서 오른쪽, 오른쪽에서 왼쪽 또는 무방향)
  • 관계 이름(단일 이름 또는 가능성 목록)
  • 한 트윈에서 다른 트윈으로의 "홉" 수(정확한 수 또는 범위)
  • 쿼리 텍스트 내의 관계를 나타내는 쿼리 변수 할당. 이렇게 하면 관계 속성을 필터링할 수도 있습니다.

MATCH 절이 있는 쿼리는 또한 WHERE 절을 사용하여 참조하는 트윈 중 하나 이상에 대해 $dtId를 지정해야 합니다.

참고 항목

MATCH는 쿼리 저장소에서 수행할 수 있는 모든 JOIN 쿼리의 상위 집합입니다.

구문

기본 MATCH 구문은 다음과 같습니다.

여기에는 다음 자리 표시자가 포함됩니다.

  • twin_or_twin_collection(x2): MATCH 절에는 단일 트윈을 나타내기 위해 하나의 피연산자가 필요합니다. 다른 피연산자는 다른 단일 트윈 또는 트윈 컬렉션을 나타낼 수 있습니다.
  • relationship_condition: 이 공간에서 트윈 또는 트윈 컬렉션 간의 관계를 설명하는 조건을 정의합니다. 조건은 관계 방향 지정, 관계 이름 지정, 홉 수 지정, 관계 속성 지정 또는 이러한 옵션 중 모든 조합이 가능합니다.
  • twin_ID: 여기에서 피연산자 중 하나가 단일 트윈을 나타내도록 트윈 컬렉션 중 하나에 $dtId를 지정합니다.
--SELECT ... FROM ...  
MATCH (twin_or_twin_collection_1)-[relationship_condition]-(twin_or_twin_collection_2)
WHERE twin_or_twin_collection.$dtId = 'twin_ID' 
-- AND ...

트윈 컬렉션 중 하나를 비워 두어 트윈이 해당 지점에서 작업할 수 있도록 할 수 있습니다.

또한 관계 조건의 수를 변경하여 여러 연결된 관계 조건을 갖거나 관계 조건이 전혀 없도록 할 수 있습니다.

--Chained relationship conditions
-- SELECT ... FROM ... 
MATCH (twin_or_twin_collection_1)-[relationship_condition]-(twin_or_twin_collection_2)-[relationship_condition]-(twin_or_twin_collection_3)...
WHERE twin_or_twin_collection.$dtId = 'twin_ID'
-- No relationship condition
-- SELECT ... FROM ... 
MATCH (twin_or_twin_collection_1)
WHERE twin_or_twin_collection.$dtId = 'twin_ID'

각 형식의 관계 조건과 이를 결합하는 방법에 대한 자세한 내용은 이 문서의 다른 섹션을 참조하세요.

예시

다음은 MATCH를 사용하는 쿼리 예입니다.

쿼리는 관계 방향을 지정하고 건물 및 센서 트윈을 쿼리합니다. 여기서...

  • 센서는 Building21의 $dtId가 있는 건물 트윈의 모든 관계에 의해 대상이 됩니다.
  • 센서의 온도가 50 이상입니다. 건물과 센서가 모두 쿼리 결과에 포함됩니다.
SELECT Building, Sensor FROM DIGITALTWINS 
MATCH (Building)-[]->(Sensor) 
WHERE Building.$dtId = 'Building21' AND Sensor.temperature > 50

관계 방향 지정

MATCH 절에서 관계 조건을 사용하여 트윈 간의 관계 방향을 지정합니다. 가능한 방향에는 왼쪽에서 오른쪽, 오른쪽에서 왼쪽 또는 무방향이 포함됩니다. 순환 관계는 자동으로 검색되므로 관계는 한 번만 순회됩니다.

참고 항목

연결을 사용하여 양방향 관계를 나타낼 수 있습니다.

Syntax

참고 항목

이 섹션의 예는 관계 방향에 중점을 둡니다. 관계 이름을 할당하지 않고 기본적으로 단일 홉을 사용하며 쿼리 변수를 관계에 할당하지 않습니다. 다른 조건으로 더 많은 작업을 수행하는 방법에 대한 지침은 관계 이름 할당, 홉 수 할당관계에 쿼리 변수 할당을 참조하세요. 동일한 쿼리에서 여러 이들을 함께 사용하는 방법에 대한 자세한 내용은 MATCH 작업 결합을 참조하세요.

방향 관계 설명은 화살표의 시각적 묘사를 사용하여 관계의 방향을 나타냅니다. 화살표에는 선택적 관계 이름을 위해 대괄호([])로 둘러싸인 공백이 포함됩니다.

이 섹션에서는 다양한 관계 방향에 대한 구문을 보여 줍니다. 값으로 바꿔야 하는 자리 표시자 값은 source_twin_or_twin_collectiontarget_twin_or_twin_collection입니다.

왼쪽에서 오른쪽 관계의 경우 다음 구문을 사용합니다.

-- SELECT ... FROM ...
MATCH (source_twin_or_twin_collection)-[]->(target_twin_or_twin_collection)
-- WHERE ...

오른쪽에서 왼쪽 관계의 경우 다음 구문을 사용합니다.

-- SELECT ... FROM ...
MATCH (target_twin_or_twin_collection)<-[]-(source_twin_or_twin_collection)
-- WHERE ...

무방향 관계의 경우 다음 구문을 사용합니다. 이는 관계의 방향을 지정하지 않으므로 모든 방향의 관계가 결과에 포함됩니다.

-- SELECT ... FROM ...
MATCH (source_twin_or_twin_collection)-[]-(target_twin_or_twin_collection)
-- WHERE ...

비방향성 쿼리에는 추가 처리가 필요하므로 대기 시간과 비용이 증가할 수 있습니다.

예제

첫 번째 예는 왼쪽에서 오른쪽 방향 순회를 보여 줍니다. 이 쿼리는 트윈 Room과 Factory를 찾습니다. 여기서...

  • Room에서 Factory로(임의의 관계 이름 포함)
  • Room의 온도 값이 50보다 큽니다.
  • Factory에는 'ABC'의 $dtId가 있습니다.
SELECT Room, Factory FROM DIGITALTWINS MATCH (Room)-[]->(Factory) 
WHERE Room.temperature > 50 AND Factory.$dtId = 'ABC'

참고 항목

MATCH 순회를 위한 시작 트윈 이외의 트윈에 대한 $dtId 필터를 포함하는 MATCH 쿼리는 빈 결과를 표시할 수 있습니다. 이는 위의 예에서 factory.$dtId에 적용됩니다. 자세한 내용은 제한 사항을 참조하세요.

다음 예에서는 오른쪽에서 왼쪽 방향 순회를 보여 줍니다. 이 쿼리는 위의 쿼리와 비슷해 보이지만 Room과 Factory 간의 관계 방향이 반대입니다. 이 쿼리는 트윈 Room과 Factory를 찾습니다. 여기서...

  • Factory에서 Room으로(관계 이름 포함)
  • Factory에는 'ABC'의 $dtId가 있습니다.
  • Room의 온도 값이 50보다 큽니다.
SELECT Room, Factory FROM DIGITALTWINS MATCH (Room)<-[]-(Factory) 
WHERE Factory.$dtId = 'ABC' AND Room.temperature > 50

다음 예에서는 비방향 순회를 보여 줍니다. 이 쿼리는 트윈 Room과 Factory를 찾습니다. 여기서...

  • Room과 Factory는 어떤 방향으로든 관계의 이름을 공유합니다.
  • Factory에는 'ABC'의 $dtId가 있습니다.
  • Room의 습도 값이 70보다 큽니다.
SELECT Factory, Room FROM DIGITALTWINS MATCH (Factory)-[]-(Room) 
WHERE Factory.$dtId ='ABC'  AND Room.humidity > 70

관계 이름 지정

선택적으로 MATCH 절에서 관계 조건을 사용하여 트윈 사이의 관계에 대한 이름을 지정할 수 있습니다. 단일 이름 또는 가능한 이름 목록을 지정할 수 있습니다. 선택적 관계 이름은 관계 방향을 지정하는 화살표 구문의 일부로 포함됩니다.

관계 이름을 제공하지 않으면 기본적으로 쿼리에 모든 관계 이름이 포함됩니다.

쿼리에서 관계 이름을 지정하면 성능이 개선되고 결과를 보다 예측 가능하게 만들 수 있습니다.

Syntax

참고 항목

이 섹션의 예는 관계 이름에 중점을 둡니다. 모두 비방향성 관계를 보여 주고 기본적으로 단일 홉을 사용하며 쿼리 변수를 관계에 할당하지 않습니다. 다른 조건으로 더 많은 작업을 수행하는 방법에 대한 지침은 관계 방향 할당, 홉 수 할당관계에 쿼리 변수 할당을 참조하세요. 동일한 쿼리에서 여러 이들을 함께 사용하는 방법에 대한 자세한 내용은 MATCH 작업 결합을 참조하세요.

트래버스할 관계의 이름을 콜론 뒤(:) 대괄호([]) 안의 MATCH 절에 지정합니다. 이 섹션에서는 명명된 관계를 지정하는 구문을 보여 줍니다.

단일 이름의 경우 다음 구문을 사용합니다. 값으로 바꿔야 하는 자리 표시자 값은 twin_or_twin_collection_1, relationship_nametwin_or_twin_collection_2입니다.

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[:relationship_name]-(twin_or_twin_collection_2)
-- WHERE ...

가능한 이름이 여러 개인 경우 다음 구문을 사용합니다. 값으로 바꿔야 하는 자리 표시자 값은 twin_or_twin_collection_1, relationship_name_option_1, relationship_name_option_2, twin_or_twin_collection_2이며 입력하려는 관계 이름 수에 따라 패턴을 계속하기 위한 메모입니다.

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[:relationship_name_option_1|relationship_name_option_2|continue pattern as needed...]-(twin_or_twin_collection_2)
-- WHERE ...

Important

대괄호 안의 콜론(:)은 MATCH 쿼리에서 관계 이름을 지정하는 데 필요한 구문의 일부입니다. 콜론을 포함하지 않으면 쿼리에서 관계 이름을 지정하지 않습니다. 대신 관계에 쿼리 변수를 할당하는 쿼리가 있습니다.

(기본값) 이름을 지정하지 않으려면 다음과 같이 괄호 안에 이름 정보를 비워둡니다.

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[]-(twin_or_twin_collection_2)
-- WHERE ...

예제

다음 예에서는 단일 관계 이름을 보여 줍니다. 이 쿼리는 트윈 Building 및 Sensor를 찾습니다. 여기서...

  • 건물에는 센서와 'contains' 관계가 있습니다(어느 방향으로든 이동).
  • Building에는 'Seattle21'의 $dtId가 있습니다.
SELECT Building, Sensor FROM DIGITALTWINS   
MATCH (Building)-[:contains]-(Sensor)  
WHERE Building.$dtId = 'Seattle21'

다음 예에서는 가능한 여러 관계 이름을 보여 줍니다. 이 쿼리는 위의 쿼리와 비슷해 보이지만 결과에 포함되는 가능한 관계 이름이 여러 개 있습니다. 이 쿼리는 트윈 Building 및 Sensor를 찾습니다. 여기서...

  • 건물에는 센서에 대한 'contains' 또는 'isAssociatedWith' 관계가 있습니다(어느 방향으로든 이동).
  • Building에는 'Seattle21'의 $dtId가 있습니다.
SELECT Building, Sensor FROM DIGITALTWINS   
MATCH (Building)-[:contains|isAssociatedWith]-(Sensor)  
WHERE building.$dtId = 'Seattle21'

다음 예에는 지정된 관계 이름이 없습니다. 결과적으로 모든 이름과의 관계가 쿼리 결과에 포함됩니다. 이 쿼리는 트윈 Building 및 Sensor를 찾습니다. 여기서...

  • Building은 어떤 이름으로든 Sensor와 관계가 있습니다(어느 방향으로든).
  • Building에는 'Seattle21'의 $dtId가 있습니다.
SELECT Building, Sensor FROM DIGITALTWINS   
MATCH (Building-[]-(Sensor)  
WHERE Building.$dtId = 'Seattle21'

홉 수 지정

선택적으로 MATCH 절의 관계 조건을 사용하여 트윈 간의 관계에 대한 홉 수를 지정할 수 있습니다. 정확한 숫자 또는 범위를 지정할 수 있습니다. 이 선택적 값은 관계 방향을 지정하는 화살표 구문의 일부로 포함됩니다.

홉 수를 제공하지 않으면 쿼리는 기본적으로 하나의 홉으로 설정됩니다.

Important

1보다 큰 수의 홉을 할당하면 관계에 쿼리 변수를 할당할 수 없습니다. 이러한 조건 중 하나만 동일한 쿼리 내에서 사용할 수 있습니다.

Syntax

참고 항목

이 섹션의 예는 홉 수에 중점을 둡니다. 이름을 지정하지 않고 모두 비방향 관계를 보여 줍니다. 이러한 다른 조건으로 더 많은 작업을 수행하는 방법에 대한 지침은 관계 방향 지정관계 이름 지정을 참조하세요. 동일한 쿼리에서 여러 이들을 함께 사용하는 방법에 대한 자세한 내용은 MATCH 작업 결합을 참조하세요.

대괄호([]) 안에 MATCH 절에 통과할 홉 수를 지정합니다.

정확한 홉 수를 지정하려면 다음 구문을 사용합니다. 값으로 바꿔야 하는 자리 표시자 값은 twin_or_twin_collection_1, number_of_hopstwin_or_twin_collection_2입니다.

-- SELECT ... FROM ... 
MATCH (twin_or_twin_collection_1)-[*number_of_hops]-(twin_or_twin_collection_2)
-- WHERE ...

홉 범위를 지정하려면 다음 구문을 사용합니다. 값으로 바꿔야 하는 자리 표시자 값은 twin_or_twin_collection_1, starting_limit, ending_limittwin_or_twin_collection_2입니다. 시작 제한은 범위에 포함되지 않지만 종료 제한은 포함됩니다.

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[*starting_limit..ending_limit]-(twin_or_twin_collection_2)
-- WHERE ...

시작 제한을 생략하여 종료 제한을 "최대한"(및 포함) 표시할 수도 있습니다. 종료 제한은 항상 제공되어야 합니다.

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)-[*..ending_limit]-(twin_or_twin_collection_2)
-- WHERE ...

(기본값) 기본적으로 하나의 홉으로 설정하려면 다음과 같이 대괄호를 홉 정보 없이 비워 둡니다.

-- SELECT ... FROM ... 
MATCH (twin_or_twin_collection_1)-[]-(twin_or_twin_collection_2)
-- WHERE ...

예제

다음 예에서는 정확한 홉 수를 지정합니다. 쿼리는 정확히 3홉인 트윈 Floor와 Room 간의 관계만 반환합니다.

SELECT Floor, Room FROM DIGITALTWINS 
MATCH (Floor)-[*3]-(Room)
WHERE Floor.$dtId = 'thermostat-15'

다음 예에서는 홉 범위를 지정합니다. 이 쿼리는 1과 3 홉(홉 수가 2 또는 3임을 의미) 사이에 있는 트윈 Floor와 Room 사이의 관계를 반환합니다.

SELECT Floor, Room FROM DIGITALTWINS 
MATCH (Floor)-[*1..3]-(Room)
WHERE Floor.$dtId = 'thermostat-15'

하나의 경계만 제공하여 범위를 표시할 수도 있습니다. 다음 예에서 쿼리는 최대 2개의 홉인 트윈 Floor와 Room 간의 관계를 반환합니다(홉 수가 1 또는 2임을 의미).

SELECT Floor, Room FROM DIGITALTWINS 
MATCH (Floor)-[*..2]-(Room)
WHERE Floor.$dtId = 'thermostat-15'

다음 예에는 홉 수가 지정되어 있지 않으므로 기본적으로 트윈 Floor와 Room 사이에 하나의 홉이 사용됩니다.

SELECT Floor, Room FROM DIGITALTWINS  
MATCH (Floor)-[]-(Room)
WHERE Floor.$dtId = 'thermostat-15'

쿼리 변수를 관계에 할당(및 관계 속성 할당)

선택적으로 쿼리 텍스트에서 이름으로 참조할 수 있도록 MATCH 절에서 참조된 관계에 쿼리 변수를 할당할 수 있습니다.

이 작업의 유용한 결과는 WHERE 절에서 관계 속성을 필터링하는 기능입니다.

Important

쿼리 변수를 관계에 할당하는 것은 쿼리가 단일 홉을 할당하는 경우에만 지원됩니다. 쿼리 내에서 관계 변수 지정과 더 많은 수의 홉 지정 중에서 선택해야 합니다.

Syntax

참고 항목

이 섹션의 예는 관계에 대한 쿼리 변수에 중점을 둡니다. 이름을 지정하지 않고 모두 비방향 관계를 보여 줍니다. 이러한 다른 조건으로 더 많은 작업을 수행하는 방법에 대한 지침은 관계 방향 지정관계 이름 지정을 참조하세요. 동일한 쿼리에서 여러 이들을 함께 사용하는 방법에 대한 자세한 내용은 MATCH 작업 결합을 참조하세요.

쿼리 변수를 관계에 할당하려면 대괄호([]) 안에 변수 이름을 입력합니다. 사용자의 값으로 바꿔져야 하는 아래 표시된 자리 표시자 값은 twin_or_twin_collection_1, relationship_variabletwin_or_twin_collection_2입니다.

-- SELECT ... FROM ...   
MATCH (twin_or_twin_collection_1)-[relationship_variable]-(twin_or_twin_collection_2>) 
-- WHERE ...

예제

다음 예제에서는 관계에 쿼리 변수 'Rel'을 할당합니다. 나중에 WHERE 절에서 변수를 사용하여 관계 Rel에 값이 'child'인 이름 속성이 있어야 함을 지정합니다.

SELECT Floor,Cafe, Rel DIGITALTWINS   
MATCH (Floor)-[Rel]-(Cafe)  
WHERE Floor.$dtId = 'thermostat-15' AND Rel.name = 'child'

MATCH 작업 결합

동일한 쿼리에서 여러 관계 조건을 결합할 수 있습니다. 양방향 관계 또는 기타 더 큰 조합을 표현하기 위해 여러 관계 조건을 연결할 수도 있습니다.

구문

단일 쿼리에서 관계 방향, 관계 이름홉 수 또는 쿼리 변수 할당 중 하나를 결합할 수 있습니다.

다음 구문 예는 이러한 특성을 결합하는 방법을 보여 줍니다. 조건의 해당 부분을 생략하기 위해 자리 표시자에 표시된 선택적 세부 정보를 생략할 수도 있습니다.

단일 쿼리 내에서 관계 방향, 관계 이름 및 홉 수를 지정하려면 관계 조건 내에서 다음 구문을 사용합니다. 값으로 바꿔야 하는 자리 표시자 값은 twin_or_twin_collection_1twin_or_twin_collection_2, optional_left_angle_bracketoptional_right_angle_bracket, relationship_name(s)number_of_hops입니다.

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)optional_left_angle_bracket-[:relationship_name(s)*number_of_hops]-optional_right_angle_bracket(twin_or_twin_collection_2)
-- WHERE

단일 쿼리 내의 관계에 대한 관계 방향, 관계 이름 및 쿼리 변수를 지정하려면 관계 조건 내에서 다음 구문을 사용합니다. 값으로 바꿔야 하는 자리 표시자 값은 twin_or_twin_collection_1twin_or_twin_collection_2, optional_left_angle_bracketoptional_right_angle_bracket, relationship_variablerelationship_name(s)입니다.

-- SELECT ... FROM ...
MATCH (twin_or_twin_collection_1)optional_left_angle_bracket-[relationship_variable:relationship_name(s)]-optional_right_angle_bracket(twin_or_twin_collection_2)
-- WHERE

참고 항목

관계 방향 지정 옵션에 따라 왼쪽에서 오른쪽 관계를 위한 왼쪽 꺾쇠 괄호 또는 오른쪽에서 왼쪽 관계를 위한 오른쪽 꺾쇠 괄호 중에서 선택해야 합니다. 동일한 화살표에 둘 다 포함할 수는 없지만 연결을 통해 양방향 관계를 나타낼 수 있습니다.

이와 같이 여러 관계 조건을 함께 연결할 수 있습니다. 값으로 바꿔야 하는 자리 표시자 값은 twin_or_twin_collection_1, relationship_condition의 모든 인스턴스 및 twin_or_twin_collection_2입니다.

--Chained relationship conditions
-- SELECT ... FROM ... 
MATCH (twin_or_twin_collection_1)-[relationship_condition]-(twin_or_twin_collection_2)-[relationship_condition]-(twin_or_twin_collection_3)...
WHERE twin_or_twin_collection.$dtId = 'twin_ID'

예제

다음은 관계 방향, 관계 이름 및 홉 수를 결합하는 예입니다. 다음 쿼리는 Floor와 Room 사이의 관계가 다음 조건을 충족하는 트윈 Floor와 Room을 찾습니다.

  • 관계는 왼쪽에서 오른쪽으로, Floor는 원본이고 Room은 대상입니다.
  • 관계의 이름은 'contains' 또는 'isAssociatedWith'입니다.
  • 관계에 4개 또는 5개의 홉이 있습니다.

쿼리는 또한 트윈 Floor에 'thermostat-15'의 $dtId가 있음을 지정합니다.

SELECT Floor, Room FROM DIGITALTWINS    
MATCH (Floor)-[:contains|isAssociatedWith*3..5]->(Room) 
WHERE Floor.$dtId = 'thermostat-15'

다음은 관계 방향, 관계 이름 및 관계에 대한 명명된 쿼리 변수를 결합하는 예입니다. 다음 쿼리는 Floor와 Room 사이의 관계가 쿼리 변수 r에 할당되고 다음 조건을 충족하는 트윈 Floor와 Room을 찾습니다.

  • 관계는 왼쪽에서 오른쪽으로, Floor는 원본이고 Room은 대상입니다.
  • 관계의 이름은 'contains' 또는 'isAssociatedWith'입니다.
  • 쿼리 변수 r이 지정된 관계는 길이 속성이 10입니다.

쿼리는 또한 트윈 Floor에 'thermostat-15'의 $dtId가 있음을 지정합니다.

SELECT Floor, Room FROM DIGITALTWINS    
MATCH (Floor)-[r:contains|isAssociatedWith]->(Room) 
WHERE Floor.$dtId = 'thermostat-15' AND r.length = 10

다음 예에서는 연결된 관계 조건을 보여 줍니다. 쿼리는 트윈 Floor, Cafe 및 Room을 찾습니다. 여기서...

  • Floor와 Room 사이의 관계는 다음 조건을 충족합니다.
    • 관계는 왼쪽에서 오른쪽으로, Floor는 원본이고 Cafe는 대상입니다.
    • 관계의 이름은 'contains' 또는 'isAssociatedWith'입니다.
    • 쿼리 변수 r이 지정된 관계의 길이 속성은 10입니다.
  • Cafe와 Room의 관계는 다음 조건을 충족합니다.
    • 관계는 오른쪽에서 왼쪽이며 Room은 원본이고 Cafe는 대상입니다.
    • 관계의 이름은 'has' 또는 'includes'입니다.
    • 관계에는 최대 3개(따라서 1, 2 또는 3)의 홉이 있습니다.

쿼리는 또한 트윈 Floor의 $dtId가 'thermostat-15'이고 트윈 Cafe의 온도가 55라고 지정합니다.

SELECT Floor,Room, Cafe FROM DIGITALTWINS    
MATCH (Floor)-[r:contains|isAssociatedWith]->(Cafe)<-[has|includes*..3]-(Room)  
WHERE Floor.$dtId = 'thermostat-15'  AND r.length = 10 AND Cafe.temperature = 55

연결된 관계 조건을 사용하여 양방향 관계를 표현할 수도 있습니다. 다음 쿼리는 트윈 Floor, Room 및 Building을 찾습니다. 여기서...

  • Building과 Floor 사이의 관계는 다음 조건을 충족합니다.
    • 관계는 왼쪽에서 오른쪽으로, Building은 원본이고 Floor는 대상입니다.
    • 관계의 이름은 'isAssociatedWith'입니다.
    • 관계에 쿼리 변수 r1가 제공됩니다.
  • Floor와 Room 사이의 관계는 다음 조건을 충족합니다.
    • 관계는 오른쪽에서 왼쪽이며 Room은 원본이고 Floor는 대상입니다.
    • 관계의 이름은 'isAssociatedWith'입니다.
    • 관계에 쿼리 변수 r2가 제공됩니다.

쿼리는 또한 트윈 Building의 $dtId가 'building-3'이고 Room의 온도가 50보다 큰 것으로 지정합니다.

SELECT Floor, Room, Building FROM DIGITALTWINS    
MATCH (Building)-[r1:isAssociatedWith]->(Floor)<-[r2:isAssociatedWith]-(Room)
WHERE Building.$dtId = 'building-3'  AND Room.temperature > 50

제한 사항

MATCH를 사용하는 쿼리에는 다음과 같은 제한이 적용됩니다.

  • 쿼리 문당 하나의 MATCH 식만 지원됩니다.

  • $dtIdWHERE 절에 필요합니다.

  • 쿼리 변수를 관계에 할당하는 것은 쿼리가 단일 홉을 할당하는 경우에만 지원됩니다.

  • 쿼리에서 지원되는 최대 홉은 10입니다.

  • MATCH 순회를 위한 시작 트윈 이외의 트윈에 대한 $dtId 필터를 포함하는 MATCH 쿼리는 빈 결과를 표시할 수 있습니다. 예를 들어, 다음 쿼리에는 이 제한이 적용됩니다.

    SELECT A, B, C FROM DIGITALTWINS 
    MATCH A-[contains]->B-[is_part_of]->C 
    WHERE B.$dtId = 'Device01'
    

    시나리오에서 다른 트윈에서 $dtId를 사용해야 하는 경우 대신 JOIN 절을 사용하는 것이 좋습니다.

  • 동일한 트윈을 여러 번 통과하는 MATCH 쿼리는 결과에서 이 트윈을 예기치 않게 제거할 수 있습니다.