簡體   English   中英

具有不同標簽和關系的不同節點的 Neo4j 子圖(如果有)

[英]Neo4j subgraph of different nodes with different labels and relationship if any

我最近開始使用 neo4j 及其查詢語言“密碼”來處理建築/計量數據。

我當前的圖形數據庫由不同的節點組成(具有不同的標簽,例如:point、meter、elec、equip ..etc。僅舉幾例),並且每個節點具有不同的屬性(在此上下文中不相關)。

我想做的是獲得具有不同標簽的不同節點的子圖。 例如,我想將所有節點標記為“點”以及標記為“裝備”的節點和標記為“米”的節點。 為此,我嘗試了以下查詢:

MATCH (p:point)
MATCH (e:equip)
MATCH (m:meter)
RETURN p, e, m

但是,這不起作用,因為:此查詢在斷開連接的模式之間構建笛卡爾積。

我試圖獲得這些,以便如果標記為“點”的節點連接到“裝備”或“儀表”節點,我將獲得關系。 如果沒有任何東西連接到“點”節點,它就會是獨立的。 因此,我可以有一個帶有“點”到“儀表”/“設備”連接的子圖,並在視覺上識別孤立的“點”。

我也嘗試過類似的事情:

MATCH (p:point)--(e:equip)
RETURN p,e

但這僅返回與“裝備”節點有些連接的“點”節點。 也沒有給我標記為“點”的孤立節點。

期待您對此的意見(我猜是簡單的情況)。

最好的事物!

以下查詢將返回每個point節點及其所有相關equip節點的列表,以及所有相關meter節點的另一個列表。

MATCH (p:point)
RETURN p, [(p)--(e:equip) | e] AS es, [(p)--(m:meter) | m] AS ms

對於這個特定的子集示例:

MATCH (p:point)--(e:equip)
RETURN p,e

如果您在 Neo4j 客戶端中顯示圖形,它將顯示我認為您希望通過這樣的簡單查詢看到的輸出(對此的許多變體也同樣有效)

MATCH (a:ACTOR), (m:MOVIE)
OPTIONAL MATCH p=(a)--(m)
return a, m, relationships(p)

翻譯成你的數據集,像這樣?

MATCH (p:point), (e:equip)
OPTIONAL MATCH t=(p)--(e)
return p, e, relationships(t)

在 neo4j 瀏覽器中運行它並查看表輸出,您將看到客戶端在創建顯示視圖時正在簡化額外的返回數據(刪除空值和重復項)

如果您的目標是最小化和重組返回的數據,最好的方法可能取決於您調用的語言以及您需要/希望它如何格式化,但這里有一個使用 neo4j 瀏覽器/桌面客戶端的快速示例查詢可能會給你一些想法和幫助重組從密碼查詢返回的內容。

MATCH (a:ACTOR), (m:MOVIE)
OPTIONAL MATCH t=(a:ACTOR)--(m:MOVIE)
with collect(distinct a) + collect(distinct m) + collect(relationships(t)) as output
return output

翻譯成你的數據集,像這樣?

MATCH (p:point), (e:equip)
OPTIONAL MATCH t=(p:point)--(e:equip)
with collect(distinct p) + collect(distinct e) + collect(relationships(t)) as output
return output

(將neo4j客戶端中的表輸出與之前的查詢進行比較)

參考文章

暫無
暫無

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

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