簡體   English   中英

Neo4j - 匹配具有多個連接的節點

[英]Neo4j - match nodes with multiple connections

在我的數據庫中有控制器和設備。 它們之間有兩種連接,一種是直接的邏輯連接,一種是通過電纜節點的物理連接。

A) 邏輯連接非常簡單,控制器和設備通過稱為“logicalConn”的連接簡單連接。

B) 物理連接更棘手。 控制器是 CTRL_ENDP(端點)節點的父節點,設備是 DEV_ENDP 節點的父節點。 這些端點然后與 CABLE 節點連接。 CABLE 節點有兩種類型的連接:源和目標。

下面是一個例子:

      ___________________[:controls]__________________
     /                                                \
    /                                                  \
   /                                                    \
CONTROLLER                                             DEVICE
   \                                                    /
  [:parentOf]                                        [:parentOf]
     \                                                / 
   CTRL_ENDP --- [:src] --- CABLE --- [:tar] --- DEV_ENDP

我需要做什么? 因此,在理想情況下,每個控制器都通過物理和邏輯連接連接到某個設備。 但我需要確定是否真的如此! 所以我需要兩個查詢:

1) 如果控制器和設備沒有邏輯連接,只有物理連接,則第一個查詢應該返回控制器和設備。

2)第二個查詢應該返回相同的,只是這次相反,所以當它們沒有物理連接時,只有邏輯連接。

如果上述兩個可以壓縮成一個查詢也很好,但是對於更簡單的解決方案,也許我們應該有兩個查詢,如上所述。

如果有人可以幫助我,我很感激!

編輯:

附加信息:

  • 此查詢將用於驗證整個數據庫以查找那些未正確連接的 ctrl-dev 對。 因此,解決方案必須查詢整個圖,而不僅僅是某個控制器-設備對。
  • 在控制器 (A) 和目標設備 (B) 之間可以存在物理上的中間設備。 像這樣:A - 電纜 - C - 電纜 - D - 電纜 - B,其中 C 和 D 也是設備,並且它也應該作為 A 和 B 之間的物理連接返回 true。

我們可以使用指定的模式來確定兩個節點之間是否存在這樣的路徑,將它們解釋為布爾值,並在返回值中輸出它們:

我假設您正在通過類似 id 參數的方式查找 :DEVICE 和 :CONTROLLER 節點,讓我們使用 $devId 和 $conId 作為輸入參數:

MATCH (c:CONTROLLER {id:$conId}), (d:DEVICE {id:$devId})
WITH exists((c)-[:logicalConn]-(d)) as logicallyConnected,
 exists((c)-[:parentOf]-()-[:src]-()-[:tar]-()-[:parentOf]-(d)) as physicallyConnected
RETURN logicallyConnected, physicallyConnected

對於給定的模式,我們感興趣的只是結構,在這種情況下是關系類型。 如果可以有不同的標記節點由您不想遍歷的那些關系類型連接,那么您可能希望將標簽添加到路徑中的節點占位符,否則關系類型應該足夠了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM