Referensi bahasa kueri Azure Digital Twins: klausul MATCH

Dokumen ini berisi informasi referensi klausul MATCH untuk bahasa kueri Azure Digital Twins.

Klausul MATCH digunakan dalam bahasa kueri Azure Digital Twins sebagai bagian dari klausul FROM. MATCH memungkinkan Anda untuk menentukan pola mana yang harus diikuti saat melintasi hubungan dalam grafik Azure Digital Twins (juga dikenal sebagai pola kueri "variable hop").

Klausa ini opsional saat membuat kueri.

Sintaks inti: MATCH

MATCH mendukung kueri apa pun yang menemukan jalur antara kembar dalam berbagai hop, berdasarkan kondisi hubungan tertentu.

Kondisi hubungan dapat mencakup satu atau beberapa dari rincian berikut:

  • Arah hubungan (kiri ke kanan, kanan ke kiri, atau tidak terarah)
  • nama hubungan (nama tunggal atau beberapa kemungkinan nama lain)
  • Jumlah "hop" dari satu kembar ke kembar lainnya (jumlah atau rentang yang tepat)
  • Penugasan variabel kueri untuk mewakili hubungan dalam teks kueri. Klausul ini juga akan memungkinkan Anda untuk memfilter properti hubungan.

Kueri dengan MATCH klausa juga harus menggunakan klausul WHERE untuk menentukan $dtId setidaknya salah satu kembar yang dirujuknya.

Catatan

MATCH adalah superset dari semua kueri JOIN yang dapat dilakukan di penyimpanan kueri.

Sintaks

Berikut adalah sintaks MATCH dasarnya.

Ini berisi tempat penampung ini:

  • twin_or_twin_collection (x2): Klausa MATCH memerlukan satu operand untuk mewakili satu kembar. Operan lain dapat mewakili kembar tunggal lain, atau kumpulan kembar.
  • relationship_condition: Dalam ruang ini, tentukan kondisi yang menjelaskan hubungan antara kembar atau koleksi kembar. Kondisi ini dapat menentukan arah hubungan, menentukan nama hubungan, menentukan jumlah hop, menentukan properti hubungan, atau kombinasi opsi ini.
  • twin_ID: Di sini, tentukan $dtId dalam salah satu koleksi kembar sehingga salah satu operand mewakili satu kembar.
--SELECT ... FROM ...  
MATCH (twin_or_twin_collection_1)-[relationship_condition]-(twin_or_twin_collection_2)
WHERE twin_or_twin_collection.$dtId = 'twin_ID' 
-- AND ...

Anda dapat membiarkan salah satu koleksi kembar kosong untuk memungkinkan kembar apa pun bekerja di tempat itu.

Anda juga dapat mengubah jumlah kondisi hubungan untuk memiliki beberapa kondisi hubungan yang ditautkan atau tanpa kondisi hubungan apa pun:

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

Untuk detail lebih lanjut setiap jenis kondisi hubungan dan cara menggabungkannya, lihat bagian lain dari dokumen ini.

Contoh

Berikut adalah kueri contoh yang menggunakan MATCH.

Kueri menentukan arah hubungan, dan mencari kembar Bangunan dan Sensor di mana...

  • Sensor ditargetkan oleh hubungan apa pun dari kembar Bangunan dengan $dtId
  • Sensor memiliki suhu di atas 50. Bangunan dan Sensor keduanya disertakan dalam hasil kueri.
SELECT Building, Sensor FROM DIGITALTWINS 
MATCH (Building)-[]->(Sensor) 
WHERE Building.$dtId = 'Building21' AND Sensor.temperature > 50

Menentukan arah hubungan

Gunakan kondisi hubungan dalam klausul MATCH untuk menentukan arah hubungan antara si kembar. Arah yang mungkin termasuk kiri ke kanan, kanan ke kiri, atau tanpa arah. Hubungan siklik terdeteksi secara otomatis, sehingga suatu hubungan hanya dilalui sekali.

Catatan

Mewakili hubungan dua arah dengan menggunakan penautan bisa dilakukan.

Sintaksis

Catatan

Contoh di bagian ini berfokus pada arah hubungan. Contohnya tidak menentukan nama hubungan dan default ke satu hop, dan tidak menetapkan variabel kueri ke hubungan. Untuk petunjuk cara melakukan lebih banyak tindakan dengan kondisi lain tersebut, lihat Menentukan arah hubungan, Menentukan nama hubungan, dan Menentukan variabel kueri ke hubungan. Untuk informasi cara menggunakan beberapa di antaranya secara bersamaan dalam kueri yang sama, lihat Menggabungkan operasi MATCH.

Deskripsi hubungan terarah menggunakan penggambaran visual panah untuk menunjukkan arah hubungan. Panah mencakup ruang yang dipisahkan oleh tanda kurung siku ([]) untuk nama hubungan opsional.

Bagian ini menunjukkan sintaks arah hubungan yang berbeda. Nilai tempat penampung yang harus diganti dengan nilai Anda adalah source_twin_or_twin_collection dan target_twin_or_twin_collection.

Untuk hubungan kiri-ke-kanan, gunakan sintaks berikut.

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

Untuk hubungan kanan-ke-kiri, gunakan sintaks berikut.

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

Untuk hubungan tanpa arah, gunakan sintaks berikut. Tindakan tidak akan menentukan arah untuk hubungan, sehingga hubungan dari segala arah akan dimasukkan dalam hasilnya.

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

Tip

Kueri tanpa arah memerlukan pemrosesan tambahan yang dapat mengakibatkan peningkatan latensi dan biaya.

Contoh

Contoh pertama menunjukkan traversal arah kiri-ke-kanan. Kueri ini menemukan Twins Room dan Factory di mana...

  • Target kamar Factory (dengan nama hubungan apa pun)
  • Kamar memiliki nilai suhu yang lebih besar dari 50
  • Pabrik memiliki $dtId 'ABC'
SELECT Room, Factory FROM DIGITALTWINS MATCH (Room)-[]->(Factory) 
WHERE Room.temperature > 50 AND Factory.$dtId = 'ABC'

Catatan

Kueri MATCH yang berisi $dtId filter pada kembar apa pun selain kembar awal untuk traversal MATCH dapat menampilkan hasil kosong. Ini berlaku untuk factory.$dtId dalam contoh di atas. Untuk informasi selengkapnya, lihat Batasan.

Contoh berikut menunjukkan traversal arah kanan-ke-kiri. Kueri ini terlihat mirip dengan yang di atas, tetapi arah hubungan antara Ruangan dan Pabrik dibalik. Kueri ini menemukan Twins Room dan Factory di mana...

  • Factory menargetkan Ruangan (dengan nama hubungan apa pun)
  • Pabrik memiliki $dtId 'ABC'
  • Kamar memiliki nilai suhu yang lebih besar dari 50
SELECT Room, Factory FROM DIGITALTWINS MATCH (Room)<-[]-(Factory) 
WHERE Factory.$dtId = 'ABC' AND Room.temperature > 50

Contoh berikut menunjukkan traversal tanpa arah. Kueri ini menemukan Twins Room dan Factory di mana...

  • Kamar dan Pabrik berbagi nama hubungan apa pun, menuju ke kedua arah
  • Pabrik memiliki $dtId 'ABC'
  • Kamar memiliki nilai kelembaban yang lebih besar dari 70
SELECT Factory, Room FROM DIGITALTWINS MATCH (Factory)-[]-(Room) 
WHERE Factory.$dtId ='ABC'  AND Room.humidity > 70

Menentukan nama hubungan

Secara opsional, Anda dapat menggunakan kondisi hubungan dalam klausul MATCH untuk menentukan nama hubungan antara kembar. Anda dapat menentukan satu nama atau beberapa nama. Nama hubungan opsional disertakan sebagai bagian dari sintaks panah untuk menentukan arah hubungan.

Jika Anda tidak memberikan nama hubungan, kueri akan menyertakan semua nama hubungan secara default.

Tip

Menentukan nama hubungan dalam kueri dapat meningkatkan performa dan membuat menjadi lebih mudah diprediksi.

Sintaksis

Catatan

Contoh di bagian ini berfokus pada nama hubungan. Contohnya menunjukkan hubungan tanpa arah, dan default ke hop tunggal, serta contohnya tidak menetapkan variabel kueri ke hubungan. Untuk petunjuk cara melakukan lebih banyak tindakan dengan kondisi lain tersebut, lihat Menentukan arah hubungan, Menentukan jumlah hop, dan Menentukan variabel kueri ke hubungan. Untuk informasi cara menggunakan beberapa di antaranya secara bersamaan dalam kueri yang sama, lihat Menggabungkan operasi MATCH.

Tentukan nama hubungan yang akan dilalui dalam klausa dalam MATCH tanda kurung siku ([]), setelah titik dua (:). Bagian ini menunjukkan sintaks untuk menentukan hubungan bernama.

Untuk satu nama, gunakan sintaks berikut. Nilai tempat penampung yang harus diganti dengan nilai Anda adalah twin_or_twin_collection_1, relationship_name, dan twin_or_twin_collection_2.

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

Untuk beberapa kemungkinan nama, gunakan sintaks berikut. Nilai tempat penampung yang harus diganti dengan nilai Anda adalah twin_or_twin_collection_1, relationship_name_option_1, relationship_name_option_2, twin_or_twin_collection_2, dan catatan untuk melanjutkan pola yang diperlukan untuk jumlah nama hubungan yang ingin Anda masukkan.

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

Penting

Titik dua (:) dalam tanda kurung siku adalah bagian yang diperlukan dari sintaks untuk menentukan nama hubungan dalam MATCH kueri. Jika Anda tidak menyertakan titik dua, kueri Anda tidak menentukan nama hubungan. Sebagai gantinya, Anda memiliki kueri yang menetapkan variabel kueri ke hubungan.

(Default) Untuk membuat nama tidak ditentukan, biarkan tanda kurung agar kosong, seperti ini:

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

Contoh

Contoh berikut menunjukkan nama hubungan tunggal. Kueri ini menemukan Kembar Membangun dan Sensor di mana...

  • Bangunan memiliki hubungan 'berisi' dengan Sensor (ke kedua arah)
  • Bangunan memiliki $dtId 'Seattle21'
SELECT Building, Sensor FROM DIGITALTWINS   
MATCH (Building)-[:contains]-(Sensor)  
WHERE Building.$dtId = 'Seattle21'

Contoh berikut menunjukkan beberapa kemungkinan nama hubungan. Kueri ini terlihat mirip dengan yang di atas, tetapi ada beberapa kemungkinan nama hubungan yang disertakan dalam hasilnya. Kueri ini menemukan Kembar Membangun dan Sensor di mana...

  • Bangunan memiliki hubungan 'berisi' atau 'isAssociatedWith' dengan Sensor (ke kedua arah)
  • Bangunan memiliki $dtId 'Seattle21'
SELECT Building, Sensor FROM DIGITALTWINS   
MATCH (Building)-[:contains|isAssociatedWith]-(Sensor)  
WHERE building.$dtId = 'Seattle21'

Contoh berikut tidak memiliki nama hubungan tertentu. Akibatnya, hubungan dengan nama apa pun akan disertakan dalam hasil kueri. Kueri ini menemukan Kembar Membangun dan Sensor di mana...

  • Bangunan memiliki hubungan dengan Sensor dengan nama apa pun (dan menuju ke kedua arah)
  • Bangunan memiliki $dtId 'Seattle21'
SELECT Building, Sensor FROM DIGITALTWINS   
MATCH (Building-[]-(Sensor)  
WHERE Building.$dtId = 'Seattle21'

Menentukan jumlah hop

Secara opsional, Anda dapat menggunakan kondisi hubungan dalam klausul MATCH untuk menentukan jumlah hop untuk hubungan antar kembar. Anda dapat menentukan angka pasti atau rentang angka. Nilai opsional disertakan sebagai bagian dari sintaks panah untuk menentukan arah hubungan.

Jika Anda tidak memberikan jumlah hop, kueri akan default ke satu hop.

Penting

Jika Anda menentukan jumlah hop lebih dari satu, Anda tidak dapat menetapkan variabel kueri ke hubungan. Hanya ada satu dari kondisi ini yang dapat digunakan dalam kueri yang sama.

Sintaksis

Catatan

Contoh di bagian ini berfokus pada jumlah hop. Semua contohnya menunjukkan hubungan tanpa arah tanpa menentukan nama. Untuk petunjuk cara melakukan lebih banyak tindakan dengan kondisi lain tersebut, lihat Menentukan arah hubungan dan Menentukan nama hubungan. Untuk informasi cara menggunakan beberapa di antaranya secara bersamaan dalam kueri yang sama, lihat Menggabungkan operasi MATCH.

Tentukan jumlah hop yang harus dilalui dalam klausul MATCH di dalam tanda kurung siku ([]).

Untuk menentukan jumlah hop yang pasti, gunakan sintaks berikut. Nilai tempat penampung yang harus diganti dengan nilai Anda adalah twin_or_twin_collection_1, number_of_hops, dan twin_or_twin_collection_2.

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

Untuk menentukan rentang hop, gunakan sintaks berikut. Nilai tempat penampung yang harus diganti dengan nilai Anda adalah twin_or_twin_collection_1, , starting_limitending_limit dan twin_or_twin_collection_2. Batas awal tidak disertakan dalam rentang, sementara batas akhir disertakan.

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

Anda juga dapat membiarkan batas awal untuk menunjukkan "apa pun hingga" (dan termasuk) batas akhir. Batas akhir harus selalu disediakan.

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

(Default) Untuk default ke satu hop, biarkan tanda kurung kosong tanpa informasi hop, seperti ini:

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

Contoh

Contoh berikut menentukan jumlah hop yang tepat. Kueri hanya akan mengembalikan hubungan antara Lantai kembar dan Ruangan yang persis 3 hop.

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

Contoh berikut menentukan rentang hop. Kueri akan mengembalikan hubungan antara Lantai kembar dan Ruangan yang berada di antara 1 dan 3 hop (yang berarti jumlah hop adalah 2 atau 3).

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

Anda juga dapat menunjukkan rentang dengan hanya menyediakan satu batas. Dalam contoh berikut, kueri akan mengembalikan hubungan antara Lantai kembar dan Ruangan yang paling banyak 2 hop (yang berarti jumlah hop adalah 1 atau 2).

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

Contoh berikut tidak memiliki jumlah hop yang ditentukan, jadi akan default ke satu hop antara Lantai kembar dan Kamar.

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

Menetapkan variabel kueri ke hubungan (dan menentukan properti hubungan)

Secara opsional, Anda dapat menetapkan variabel kueri ke hubungan yang dirujuk dalam klausul MATCH, sehingga Anda dapat merujuknya dengan nama dalam teks kueri.

Hasil yang bermanfaat dari tindakan ini adalah kemampuan untuk memfilter properti hubungan dalam klausul WHERE Anda.

Penting

Menetapkan variabel kueri ke hubungan hanya didukung saat kueri menentukan satu hop. Dalam kueri, Anda harus memilih antara menentukan variabel hubungan dan menentukan jumlah hop yang lebih besar.

Sintaksis

Catatan

Contoh di bagian ini fokus pada variabel kueri untuk hubungan. Semua contohnya menunjukkan hubungan tanpa arah tanpa menentukan nama. Untuk petunjuk cara melakukan lebih banyak tindakan dengan kondisi lain tersebut, lihat Menentukan arah hubungan dan Menentukan nama hubungan. Untuk informasi cara menggunakan beberapa di antaranya secara bersamaan dalam kueri yang sama, lihat Menggabungkan operasi MATCH.

Untuk menetapkan variabel kueri ke hubungan, masukkan nama variabel ke dalam tanda kurung siku ([]). Nilai placeholder yang ditunjukkan di bawah ini yang harus diganti dengan nilai Anda adalah twin_or_twin_collection_1, relationship_variable, dan twin_or_twin_collection_2.

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

Contoh

Contoh berikut menetapkan variabel kueri 'Rel' ke hubungan. Kemudian, dalam WHERE klausa, ia menggunakan variabel untuk menentukan bahwa rel hubungan harus memiliki properti nama dengan nilai 'anak'.

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

Menggabungkan operasi MATCH

Anda dapat menggabungkan beberapa kondisi hubungan dalam kueri yang sama. Anda juga dapat merangkai beberapa kondisi hubungan untuk mengekspresikan hubungan dua arah atau kombinasi yang lebih besar lainnya.

Sintaks

Dalam satu kueri, Anda bisa menggabungkan arah hubungan, nama hubungan, dan salah satu dari jumlah hop atau penetapan variabel kueri.

Contoh sintaks berikut menunjukkan bagaimana atribut ini dapat digabungkan. Anda juga dapat meninggalkan salah satu rincian opsional yang ditampilkan di tempat penampung untuk menghilangkan bagian dari kondisi tersebut.

Untuk menentukan arah hubungan, nama hubungan, dan jumlah hop dalam satu kueri, gunakan sintaks berikut dalam kondisi hubungan. Nilai tempat penampung yang harus diganti dengan nilai Anda adalah twin_or_twin_collection_1 dan twin_or_twin_collection_2, optional_left_angle_bracket dan optional_right_angle_bracket, relationship_name(s), dan 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

Untuk menentukan arah hubungan, nama hubungan, dan variabel kueri untuk hubungan dalam satu kueri, gunakan sintaks berikut dalam kondisi hubungan. Nilai tempat penampung yang harus diganti dengan nilai Anda adalah twin_or_twin_collection_1 dan twin_or_twin_collection_2, optional_left_angle_bracket dan optional_right_angle_bracket, relationship_variable, dan 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

Catatan

Sesuai opsi untuk menentukan arah hubungan, Anda harus memilih antara tanda kurung sudut kiri untuk hubungan kiri-ke-kanan atau tanda kurung sudut kanan untuk hubungan kanan-ke-kiri. Anda tidak dapat menyertakan keduanya pada panah yang sama, tetapi dapat mewakili hubungan dua arah dengan merangkainya.

Anda dapat merangkai beberapa kondisi hubungan bersama-sama, seperti ini. Nilai tempat penampung yang harus diganti dengan nilai Anda adalah twin_or_twin_collection_1, semua instans relationship_condition, dan 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'

Contoh

Berikut adalah contoh yang menggabungkan arah hubungan, nama hubungan, dan jumlah hop. Kueri berikut menemukan Lantai dan Ruangan kembar tempat hubungan antara Lantai dan Ruangan memenuhi kondisi ini:

  • hubungannya kiri-ke-kanan, dengan Lantai sebagai sumber dan Ruangan sebagai target
  • hubungan memiliki nama baik 'contains' atau 'isAssociatedWith'
  • hubungan ini memiliki 4 atau 5 hop

Kueri juga menentukan bahwa Lantai kembar memiliki $dtId 'termostat-15'.

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

Berikut adalah contoh yang menggabungkan arah hubungan, nama hubungan, dan variabel kueri bernama untuk hubungan tersebut. Kueri berikut menemukan Lantai dan Ruangan kembar tempat hubungan antara Lantai dan Ruangan ditetapkan ke variabel r kueri dan memenuhi kondisi ini:

  • hubungannya kiri-ke-kanan, dengan Lantai sebagai sumber dan Ruangan sebagai target
  • hubungan memiliki nama baik 'contains' atau 'isAssociatedWith'
  • hubungan, yang diberi variabel rkueri , memiliki properti panjang yang sama dengan 10

Kueri juga menentukan bahwa Lantai kembar memiliki $dtId 'termostat-15'.

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

Contoh berikut menggambarkan kondisi hubungan yang dirangkai. Kueri menemukan Lantai kembar, Kafe, dan Kamar, di mana...

  • hubungan antara Lantai dan Kamar memenuhi kondisi ini:
    • hubungannya kiri-ke-kanan, dengan Lantai sebagai sumber dan Kafe sebagai target
    • hubungan memiliki nama baik 'contains' atau 'isAssociatedWith'
    • hubungan, yang diberikan variabel rkueri , memiliki properti panjang yang sama dengan 10
  • hubungan antara Cafe dan Room memenuhi kondisi ini:
    • hubungannya kanan-ke-kiri, dengan Ruangan sebagai sumber dan Kafe sebagai target
    • hubungan memiliki nama baik 'has' atau 'includes'
    • hubungan memiliki hingga 3 (jadi 1, 2, atau 3) hop

Kueri juga menentukan bahwa Lantai kembar memiliki $dtId 'termostat-15' dan Kafe kembar memiliki suhu 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

Anda juga dapat menggunakan kondisi hubungan yang dirangkai untuk mengekspresikan hubungan dua arah. Kueri berikut menemukan Twins Floor, Room, dan Building, where...

  • hubungan antara Bangunan dan Lantai memenuhi kondisi ini:
    • hubungannya kiri-ke-kanan, dengan Bangunan sebagai sumber dan Lantai sebagai target
    • hubungan ini memiliki nama 'isAssociatedWith'
    • hubungan diberikan variabel kueri r1
  • hubungan antara Lantai dan Kamar memenuhi kondisi ini:
    • hubungannya kanan-ke-kiri, dengan Ruangan sebagai sumber dan Lantai sebagai target
    • hubungan ini memiliki nama 'isAssociatedWith'
    • hubungan diberikan variabel kueri r2

Kueri juga menentukan bahwa Bangunan kembar memiliki $dtId 'bangunan-3' dan Ruangan memiliki suhu lebih besar dari 50.

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

Batasan

Batas berikut berlaku untuk kueri yang menggunakan MATCH:

  • Hanya satu MATCH ekspresi yang didukung per pernyataan kueri.

  • $dtId diperlukan dalam WHERE klausa.

  • Menetapkan variabel kueri ke hubungan hanya didukung saat kueri menentukan satu hop.

  • Lompatan maksimum yang didukung dalam kueri adalah 10.

  • Kueri MATCH yang berisi $dtId filter pada kembar apa pun selain kembar awal untuk traversal MATCH dapat menampilkan hasil kosong. Misalnya, kueri berikut tunduk pada batasan ini:

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

    Jika skenario Anda mengharuskan Anda untuk menggunakan $dtId pada kembar lain, pertimbangkan untuk menggunakan klausa JOIN sebagai gantinya.

  • Kueri MATCH yang melintasi kembar yang sama beberapa kali dapat secara tak terduga menghapus kembar ini dari hasil.