Dokumentacja języka zapytań usługi Azure Digital Twins: KLAUZULA MATCH

Ten dokument zawiera informacje referencyjne dotyczące klauzuli MATCH dla języka zapytań usługi Azure Digital Twins.

Klauzula MATCH jest używana w języku zapytań usługi Azure Digital Twins w ramach klauzuli FROM. MATCH Umożliwia określenie, który wzorzec powinien być obserwowany podczas przechodzenia relacji na grafie usługi Azure Digital Twins (jest to również znany jako wzorzec zapytania "przeskok zmiennej").

Ta klauzula jest opcjonalna podczas wykonywania zapytań.

Składnia podstawowa: MATCH

MATCH obsługuje dowolne zapytanie, które znajduje ścieżkę między bliźniaczymi reprezentacjami w zakresie przeskoków na podstawie określonych warunków relacji.

Warunek relacji może zawierać co najmniej jeden z następujących szczegółów:

  • Kierunek relacji (od lewej do prawej, od prawej do lewej lub niekierunkowej)
  • nazwa relacji (pojedyncza nazwa lub lista możliwości)
  • Liczba "przeskoków" z jednej reprezentacji bliźniaczej do innej (dokładna liczba lub zakres)
  • Przypisanie zmiennej zapytania reprezentującej relację w tekście zapytania. Umożliwi to również filtrowanie właściwości relacji.

Zapytanie z klauzulą MATCH musi również używać klauzuli WHERE, aby określić $dtId dla co najmniej jednej z bliźniaczych reprezentacji, do których się odwołuje.

Uwaga

MATCH to nadzbiór wszystkich JOIN zapytań, które można wykonać w magazynie zapytań.

Składnia

Oto podstawowa MATCH składnia.

Zawiera te symbole zastępcze:

  • twin_or_twin_collection (x2): Klauzula MATCH wymaga jednego operandu do reprezentowania pojedynczej reprezentacji bliźniaczej. Drugi operand może reprezentować inną pojedynczą reprezentację bliźniacze lub kolekcję reprezentacji bliźniaczych.
  • relationship_condition: W tym obszarze zdefiniuj warunek opisujący relację między bliźniaczymi lub kolekcjami bliźniaczych reprezentacji. Warunek może określać kierunek relacji, określać nazwę relacji, określać liczbę przeskoków, określać właściwości relacji lub dowolną kombinację tych opcji.
  • twin_ID: W tym miejscu określ $dtId element w jednej z kolekcji reprezentacji bliźniaczych, tak aby jeden z operandów reprezentuje jedną reprezentację bliźniaczą.
--SELECT ... FROM ...  
MATCH (twin_or_twin_collection_1)-[relationship_condition]-(twin_or_twin_collection_2)
WHERE twin_or_twin_collection.$dtId = 'twin_ID' 
-- AND ...

Możesz pozostawić jedną z kolekcji bliźniaczych pustą, aby umożliwić pracę dowolnej reprezentacji bliźniaczej w tym miejscu.

Można również zmienić liczbę warunków relacji, aby mieć wiele warunków relacji łańcuchowych lub w ogóle nie ma warunku relacji:

--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'

Aby uzyskać więcej informacji na temat każdego typu warunku relacji i sposobu ich łączenia, zobacz inne sekcje tego dokumentu.

Przykład

Oto przykładowe zapytanie używające polecenia MATCH.

Zapytanie określa kierunek relacji i wyszukuje bliźniacze reprezentacje kompilowania i czujnika, gdzie...

  • Czujnik jest kierowany przez wszelkie relacje z bliźniaczej reprezentacji budynku z $dtId budynku21 i
  • Czujnik ma temperaturę powyżej 50. Budynek i czujnik są uwzględniane w wyniku zapytania.
SELECT Building, Sensor FROM DIGITALTWINS 
MATCH (Building)-[]->(Sensor) 
WHERE Building.$dtId = 'Building21' AND Sensor.temperature > 50

Określanie kierunku relacji

Użyj warunku relacji w klauzuli MATCH , aby określić kierunek relacji między bliźniaczymi reprezentacjami. Możliwe kierunki obejmują od lewej do prawej, od prawej do lewej lub niekierunkowe. Relacje cykliczne są wykrywane automatycznie, dzięki czemu relacja jest przechodzina tylko raz.

Uwaga

Można reprezentować relacje dwukierunkowe przy użyciu łańcucha.

Składnia

Uwaga

Przykłady w tej sekcji koncentrują się na kierunku relacji. Nie określają nazw relacji, są one domyślne dla pojedynczego przeskoku i nie przypisują zmiennych zapytania do relacji. Aby uzyskać instrukcje dotyczące wykonywania dodatkowych czynności z tymi innymi warunkami, zobacz Określanie nazwy relacji, Określanie liczby przeskoków i Przypisywanie zmiennej kwerendy do relacji. Aby uzyskać informacje na temat używania kilku z nich razem w tym samym zapytaniu, zobacz Łączenie operacji MATCH.

Opisy relacji kierunkowych używają wizualnego przedstawienia strzałki, aby wskazać kierunek relacji. Strzałka zawiera spację odłożone nawiasami kwadratowymi ([]) dla opcjonalnej nazwy relacji.

W tej sekcji przedstawiono składnię dla różnych kierunków relacji. Wartości zastępcze, które powinny zostać zastąpione wartościami, to source_twin_or_twin_collection i target_twin_or_twin_collection.

W przypadku relacji od lewej do prawej użyj następującej składni.

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

W przypadku relacji od prawej do lewej użyj następującej składni.

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

W przypadku relacji niekierunkowej użyj następującej składni. Nie określi to kierunku relacji, więc relacje dowolnego kierunku zostaną uwzględnione w wyniku.

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

Napiwek

Zapytania niekierunkowe wymagają dodatkowego przetwarzania, co może spowodować zwiększenie opóźnienia i kosztów.

Przykłady

W pierwszym przykładzie przedstawiono przechodzenie kierunkowe od lewej do prawej. To zapytanie znajduje bliźniacze pokoje i fabrykę, gdzie...

  • Room targets Factory (z dowolną nazwą relacji)
  • Pokój ma wartość temperatury większą niż 50
  • Fabryka ma $dtId "ABC"
SELECT Room, Factory FROM DIGITALTWINS MATCH (Room)-[]->(Factory) 
WHERE Room.temperature > 50 AND Factory.$dtId = 'ABC'

Uwaga

Zapytania MATCH zawierające $dtId filtry dla dowolnej reprezentacji bliźniaczej innej niż początkowa reprezentacja bliźniacza przechodzenia MATCH mogą pokazywać puste wyniki. Dotyczy factory.$dtId to w powyższym przykładzie. Aby uzyskać więcej informacji, zobacz Ograniczenia.

W poniższym przykładzie pokazano kierunek od prawej do lewej. To zapytanie wygląda podobnie do powyższego, ale kierunek relacji między pokojem a fabryką jest odwrócony. To zapytanie znajduje bliźniacze pokoje i fabrykę, gdzie...

  • Miejsce docelowe fabryki Pokój (z dowolną nazwą relacji)
  • Fabryka ma $dtId "ABC"
  • Pokój ma wartość temperatury większą niż 50
SELECT Room, Factory FROM DIGITALTWINS MATCH (Room)<-[]-(Factory) 
WHERE Factory.$dtId = 'ABC' AND Room.temperature > 50

W poniższym przykładzie pokazano przechodzenie niekierunkowe. To zapytanie znajduje bliźniacze pokoje i fabrykę, gdzie...

  • Pokój i fabryka mają dowolną nazwę relacji, przechodząc w obu kierunkach
  • Fabryka ma $dtId "ABC"
  • Pokój ma wartość wilgotności większą niż 70
SELECT Factory, Room FROM DIGITALTWINS MATCH (Factory)-[]-(Room) 
WHERE Factory.$dtId ='ABC'  AND Room.humidity > 70

Określ nazwę relacji

Opcjonalnie możesz użyć warunku relacji w klauzuli MATCH , aby określić nazwy relacji między bliźniaczymi reprezentacjami. Można określić jedną nazwę lub listę możliwych nazw. Opcjonalna nazwa relacji jest dołączana jako część składni strzałki w celu określenia kierunku relacji.

Jeśli nie podasz nazwy relacji, zapytanie będzie domyślnie zawierać wszystkie nazwy relacji.

Napiwek

Określanie nazw relacji w zapytaniu może zwiększyć wydajność i zwiększyć przewidywalność wyników.

Składnia

Uwaga

Przykłady w tej sekcji koncentrują się na nazwie relacji. Wszystkie one pokazują relacje niekierunkowe, są one domyślne dla pojedynczego przeskoku i nie przypisują zmiennych zapytania do relacji. Aby uzyskać instrukcje dotyczące wykonywania dodatkowych czynności z tymi innymi warunkami, zobacz Określanie kierunku relacji, Określanie liczby przeskoków i Przypisywanie zmiennej zapytania do relacji. Aby uzyskać informacje na temat używania kilku z nich razem w tym samym zapytaniu, zobacz Łączenie operacji MATCH.

Określ nazwę relacji, która ma przejść w klauzuli MATCH w nawiasach kwadratowych ([]), po dwukropku (:). W tej sekcji przedstawiono składnię określania nazwanych relacji.

W przypadku pojedynczej nazwy użyj następującej składni. Wartości zastępcze, które powinny zostać zastąpione wartościami, to twin_or_twin_collection_1, relationship_namei twin_or_twin_collection_2.

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

W przypadku wielu możliwych nazw użyj następującej składni. Wartości symboli zastępczych, które powinny zostać zastąpione wartościami, to twin_or_twin_collection_1, relationship_name_option_1, relationship_name_option_2, twin_or_twin_collection_2i uwaga, aby kontynuować wzorzec zgodnie z potrzebami dla liczby nazw relacji, które chcesz wprowadzić.

-- 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 ...

Ważne

Dwukropek (:) w nawiasach kwadratowych jest wymaganą częścią składni określania nazwy relacji w MATCH zapytaniu. Jeśli nie dołączysz dwukropka, zapytanie nie określi nazwy relacji. Zamiast tego masz zapytanie, które przypisuje zmienną zapytania do relacji.

(Ustawienie domyślne) Aby pozostawić nazwę nieokreśloną, pozostaw nawiasy puste informacji o nazwie, w następujący sposób:

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

Przykłady

W poniższym przykładzie przedstawiono pojedynczą nazwę relacji. To zapytanie znajduje bliźniacze budowy i czujnika, gdzie...

  • Budynek ma relację "contains" z czujnikiem (w obu kierunkach)
  • Budynek ma $dtId element "Seattle21"
SELECT Building, Sensor FROM DIGITALTWINS   
MATCH (Building)-[:contains]-(Sensor)  
WHERE Building.$dtId = 'Seattle21'

W poniższym przykładzie przedstawiono wiele możliwych nazw relacji. To zapytanie wygląda podobnie do powyższego, ale istnieje wiele możliwych nazw relacji, które są uwzględnione w wyniku. To zapytanie znajduje bliźniacze budowy i czujnika, gdzie...

  • Budynek ma relację "contains" lub "isAssociatedWith" z czujnikiem (w obu kierunkach)
  • Budynek ma $dtId element "Seattle21"
SELECT Building, Sensor FROM DIGITALTWINS   
MATCH (Building)-[:contains|isAssociatedWith]-(Sensor)  
WHERE building.$dtId = 'Seattle21'

W poniższym przykładzie nie określono nazwy relacji. W rezultacie relacje z dowolną nazwą zostaną uwzględnione w wyniku zapytania. To zapytanie znajduje bliźniacze budowy i czujnika, gdzie...

  • Budynek ma relację z czujnikiem o dowolnej nazwie (i w obu kierunkach)
  • Budynek ma $dtId element "Seattle21"
SELECT Building, Sensor FROM DIGITALTWINS   
MATCH (Building-[]-(Sensor)  
WHERE Building.$dtId = 'Seattle21'

Określ liczbę przeskoków

Opcjonalnie możesz użyć warunku relacji w klauzuli MATCH , aby określić liczbę przeskoków dla relacji między bliźniaczymi reprezentacjami. Możesz określić dokładną liczbę lub zakres. Ta opcjonalna wartość jest uwzględniana jako część składni strzałki w celu określenia kierunku relacji.

Jeśli nie podasz kilku przeskoków, zapytanie będzie domyślnie mieć jeden przeskok.

Ważne

Jeśli określisz liczbę przeskoków, które są większe niż jeden, nie można przypisać zmiennej kwerendy do relacji. W ramach tego samego zapytania można użyć tylko jednego z tych warunków.

Składnia

Uwaga

Przykłady w tej sekcji koncentrują się na liczbie przeskoków. Wszystkie one pokazują relacje niekierunkowe bez określania nazw. Aby uzyskać instrukcje dotyczące wykonywania dodatkowych czynności z tymi innymi warunkami, zobacz Określanie kierunku relacji i Określanie nazwy relacji. Aby uzyskać informacje na temat używania kilku z nich razem w tym samym zapytaniu, zobacz Łączenie operacji MATCH.

Określ liczbę przeskoków do przejścia w klauzuli MATCH w nawiasach kwadratowych ([]).

Aby określić dokładną liczbę przeskoków, użyj następującej składni. Wartości zastępcze, które powinny zostać zastąpione wartościami, to twin_or_twin_collection_1, number_of_hopsi twin_or_twin_collection_2.

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

Aby określić zakres przeskoków, użyj następującej składni. Wartości zastępcze, które powinny zostać zastąpione wartościami, to twin_or_twin_collection_1, starting_limitending_limit i twin_or_twin_collection_2. Limit początkowy nie jest uwzględniony w zakresie, podczas gdy limit końcowy jest uwzględniany.

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

Możesz również pominąć limit początkowy, aby wskazać "wszystko do" (i w tym) limit końcowy. Należy zawsze podać limit końcowy.

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

(Ustawienie domyślne) Aby domyślnie przeskoczyć jeden przeskok, pozostaw nawiasy puste informacji o przeskoku, w następujący sposób:

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

Przykłady

Poniższy przykład określa dokładną liczbę przeskoków. Zapytanie zwróci tylko relacje między bliźniaczymi elementami Floor i Room, które mają dokładnie 3 przeskoki.

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

W poniższym przykładzie określono zakres przeskoków. Zapytanie zwróci relacje między reprezentacjami bliźniaczymi Floor i Room z przedziału od 1 do 3 przeskoków (co oznacza, że liczba przeskoków wynosi 2 lub 3).

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

Zakres można również pokazać, podając tylko jedną granicę. W poniższym przykładzie zapytanie zwróci relacje między bliźniaczymi elementami Floor i Room, które znajdują się co najwyżej 2 przeskoki (co oznacza, że liczba przeskoków wynosi 1 lub 2).

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

W poniższym przykładzie nie określono liczby przeskoków, więc domyślnie jeden przeskok między bliźniakami Floor i Room.

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

Przypisywanie zmiennej zapytania do relacji (i określanie właściwości relacji)

Opcjonalnie możesz przypisać zmienną kwerendy do relacji, do której odwołuje się MATCH ta klauzula, aby można było odwoływać się do niej według nazwy w tekście zapytania.

Przydatnym wynikiem tego jest możliwość filtrowania właściwości relacji w WHERE klauzuli .

Ważne

Przypisywanie zmiennej zapytania do relacji jest obsługiwane tylko wtedy, gdy zapytanie określa pojedynczy przeskok. W zapytaniu należy wybrać między określeniem zmiennej relacji a określeniem większej liczby przeskoków.

Składnia

Uwaga

Przykłady w tej sekcji koncentrują się na zmiennej zapytania dla relacji. Wszystkie one pokazują relacje niekierunkowe bez określania nazw. Aby uzyskać instrukcje dotyczące wykonywania dodatkowych czynności z tymi innymi warunkami, zobacz Określanie kierunku relacji i Określanie nazwy relacji. Aby uzyskać informacje na temat używania kilku z nich razem w tym samym zapytaniu, zobacz Łączenie operacji MATCH.

Aby przypisać zmienną kwerendy do relacji, umieść nazwę zmiennej w nawiasach kwadratowych ([]). Wartości zastępcze pokazane poniżej, które powinny zostać zastąpione wartościami, to twin_or_twin_collection_1, relationship_variablei twin_or_twin_collection_2.

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

Przykłady

Poniższy przykład przypisuje zmienną kwerendy "Rel" do relacji. Później w klauzuli WHERE używa zmiennej , aby określić, że relacja Rel powinna mieć właściwość name z wartością "child".

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

Łączenie operacji MATCH

W tym samym zapytaniu można połączyć wiele warunków relacji. Można również połączyć wiele warunków relacji, aby wyrazić relacje dwukierunkowe lub inne większe kombinacje.

Składnia

W jednym zapytaniu można połączyć kierunek relacji, nazwę relacji i jedną z wielu przeskoków lub przypisania zmiennej zapytania.

W poniższych przykładach składni pokazano, jak można połączyć te atrybuty. Możesz również pominąć dowolne z opcjonalnych szczegółów wyświetlanych w symbolach zastępczych, aby pominąć część warunku.

Aby określić kierunek relacji, nazwę relacji i liczbę przeskoków w ramach pojedynczego zapytania, użyj następującej składni w warunku relacji. Wartości zastępcze, które powinny zostać zastąpione wartościami, to twin_or_twin_collection_1 , twin_or_twin_collection_2optional_left_angle_bracket i optional_right_angle_bracket, relationship_name(s)i 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

Aby określić kierunek relacji, nazwę relacji i zmienną kwerendy dla relacji w ramach pojedynczego zapytania, użyj następującej składni w warunku relacji. Wartości zastępcze, które powinny zostać zastąpione wartościami, to twin_or_twin_collection_1 , twin_or_twin_collection_2optional_left_angle_bracket i optional_right_angle_bracket, relationship_variablei relationship_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

Uwaga

Zgodnie z opcjami określania kierunku relacji należy wybrać między lewy nawias kątowy dla relacji od lewej do prawej lub prawego nawiasu kątowego dla relacji od prawej do lewej. Nie można uwzględnić obu w tej samej strzałki, ale może reprezentować relacje dwukierunkowe, łącząc łańcuch.

Możesz połączyć wiele warunków relacji, takich jak to. Wartości zastępcze, które powinny zostać zastąpione relationship_conditionwartościami, to twin_or_twin_collection_1, wszystkie wystąpienia elementów i 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'

Przykłady

Oto przykład, który łączy kierunek relacji, nazwę relacji i liczbę przeskoków. Następujące zapytanie znajduje bliźniacze podłogi i pokój, gdzie relacja między floor i Room spełnia następujące warunki:

  • relacja jest od lewej do prawej, a Floor jako źródło i Pokój jako element docelowy
  • relacja ma nazwę "contains" lub "isAssociatedWith"
  • relacja ma 4 lub 5 przeskoków

Zapytanie określa również, że bliźniacze piętro ma $dtId "termostat-15".

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

Oto przykład, który łączy kierunek relacji, nazwę relacji i nazwaną zmienną zapytania dla relacji. Następujące zapytanie znajduje bliźniacze podłogi i pokój, w którym relacja między floor i Room jest przypisana do zmiennej r zapytania i spełnia następujące warunki:

  • relacja jest od lewej do prawej, a Floor jako źródło i Pokój jako element docelowy
  • relacja ma nazwę "contains" lub "isAssociatedWith"
  • relacja, która ma zmienną kwerendy r, ma właściwość length równą 10

Zapytanie określa również, że bliźniacze piętro ma $dtId "termostat-15".

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

Poniższy przykład ilustruje warunki relacji łańcuchowych . Zapytanie znajduje bliźnięta Floor, Cafe i Room, gdzie...

  • relacja między podłogą a pokojem spełnia następujące warunki:
    • relacja jest od lewej do prawej, z Floor jako źródło i Cafe jako cel
    • relacja ma nazwę "contains" lub "isAssociatedWith"
    • relacja, która ma zmienną kwerendy r, ma właściwość length równą 10
  • związek między Cafe i Room spełnia następujące warunki:
    • relacja jest od prawej do lewej, z Room jako źródło i Cafe jako cel
    • relacja ma nazwę "has" lub "includes"
    • relacja ma do 3 (więc 1, 2 lub 3) przeskoków

Zapytanie określa również, że twin Floor ma temperaturę $dtId "termostat-15", a twin Cafe ma temperaturę 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

Możesz również użyć warunków relacji łańcuchowych, aby wyrazić relacje dwukierunkowe. Poniższe zapytanie znajduje bliźniacze elementy Floor, Room i Building, gdzie...

  • relacja między budynkiem a podłogą spełnia następujące warunki:
    • relacja jest od lewej do prawej, a kolumna Building as the source (Budynek jako źródło) i Floor (Piętro) jako element docelowy
    • relacja ma nazwę "isAssociatedWith"
    • relacja otrzymuje zmienną kwerendy r1
  • relacja między podłogą a pokojem spełnia następujące warunki:
    • relacja jest od prawej do lewej, a Pokój jako źródło i Piętro jako element docelowy
    • relacja ma nazwę "isAssociatedWith"
    • relacja otrzymuje zmienną kwerendy r2

Zapytanie określa również, że bliźniacy budynek ma $dtId wartość "building-3", a pokój ma temperaturę większą niż 50.

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

Ograniczenia

Następujące limity dotyczą zapytań przy użyciu polecenia MATCH:

  • Tylko jedno MATCH wyrażenie jest obsługiwane na instrukcję zapytania.

  • $dtId element jest wymagany w klauzuli WHERE .

  • Przypisywanie zmiennej zapytania do relacji jest obsługiwane tylko wtedy, gdy zapytanie określa pojedynczy przeskok.

  • Maksymalna liczba przeskoków obsługiwanych w zapytaniu wynosi 10.

  • Zapytania MATCH zawierające $dtId filtry dla dowolnej reprezentacji bliźniaczej innej niż początkowa reprezentacja bliźniacza przechodzenia MATCH mogą pokazywać puste wyniki. Na przykład następujące zapytanie podlega temu ograniczeniu:

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

    Jeśli scenariusz wymaga użycia $dtId w innych bliźniaczych reprezentacjach bliźniaczych, rozważ użycie klauzuli JOIN.

  • Zapytania MATCH, które przechodzą przez tę samą reprezentację bliźniaczą wielokrotnie, mogą nieoczekiwanie usunąć tę reprezentację bliźniaczą z wyników.