簡體   English   中英

如何在Neo4j數據庫中的關系屬性之一條件下編寫Cypher查詢?

[英]How to write a Cypher query with a condition on one of relationship properties in Neo4j database?

我的問題:

我是Neo4j的新手,並嘗試創建一個查詢,將節點和關系列出到圖中,關鍵字為“ id = 0001” ,如下所示:

(a)-[id:'0001',ref_id:null]->(b)-[id:'0002',ref_id:'0001']->(c)-[id:'0003',ref_id:' 0002']->(d)

起始節點將為(a),因為它與id = 0001有關系

但是數據庫也存在我不想要的關系:

(a)-[id:'2001',ref_id:null]->(b)-[id:'2002',ref_id:'2001']->(c)
(a)-[id:'3001',ref_id:null]->(b)-[id:'3002',ref_id:'3001']->(c)

結果應僅包括:

(a)-[0001]-(b)-[0002,0001]-(c)-[0003,0002]-(d)

以下是我在寫問題之前的思考:

我知道如何在SQL數據庫(如Oracle和MySQL)中創建此查詢,我可以在“ where”條件下使用查詢。 例如:

Select * 
from table_a parent, (select * from table_a) child 
where child.ref_id = parent.id

然后,我可以在Java中循環結果集以查找所有關系。 但這是愚蠢的。

我認為查詢應如下所示:

Match (n)-[r:RELTYPE]->(m) WHERE {some conditions at here} RETURN n,r,m

請幫幫我,謝謝!

雨帆

您可以使用命名關系並在WHERE子句中進行過濾:

match p = (a)-[r1:TYPE]->(b)-[r2:TYPE2]->(c)
where r1.id='0001' and r2.id='0002' and r2.ref_id='0001'
return p

請注意,Neo4j不允許使用具有空值的屬性。 因此,第一個關系將沒有ref_id

對於上述表示法,是將條件放入match的捷徑:

match p = (a)-[r1:TYPE {id:'0001'}]->(b)-[r2:TYPE2 {id:'0002', ref_id:'0001'}]->(c)
return p

附帶說明 :我不確定您在關系屬性中使用idref_id的方式是否是對數據建模的好方法。 也許您可以使用更多詳細的關系類型-但是,如果不了解域,那么實際上不可能在這里給出好的建議。

我正在使用此Cypher查詢來查找深度= 3的所有鄰居。

MATCH (a)-[r1]-(b)-[r2]-(c)-[r3]-(n) 
WHERE n.APPLE_ID='12345' 
RETURN distinct n, distinct r3 

謝謝

暫無
暫無

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

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