簡體   English   中英

Neo4J cypher 可選匹配如何工作?

[英]How does Neo4J cypher OPTIONAL MATCH works?

我今天在理解 cypher 中的 OPTIONAL MATCH 子句時遇到了問題。 讓我們考慮這個簡單的案例:

CREATE (:a {type:"group"})-[:a_rel]->(:a {type: "app"})-[:b_rel]->(:b);

這將創建 2 個具有不同類型屬性的“a”節點,以及一個“b”節點。 它們都在一個簡單的路徑中 a-->a-->b

然后,我試圖匹配具有“組”類型的“a”節點,連接到另一個“a”節點,可選地連接到“b”節點。

因此,如果我運行以下查詢,我希望它不會返回任何內容:

MATCH(x:a)-->(y:a) 
where x.type = "group" 
OPTIONAL MATCH (y)-->(z:b) 
where z IS NULL 
return y

但它總是返回路徑的第二個“a”節點,在 where 子句中使用 IS NULL 或 IS NOT NULL。

你能解釋一下我在這里不明白的地方嗎? 在我真正的 model 中,第二個“a”節點可以連接或不連接到“b”節點。 我想檢索所有未連接到任何“b”節點的節點。

非常感謝你的幫助

雷米

OPTIONAL MATCH 所做的是,它試圖找出圖中的模式。如果找到匹配模式,則返回 Node,否則將其替換為 NULL。我希望這會消除造成的混亂。

只要MATCH子句找到匹配項,查詢將始終返回y

這是因為OPTIONAL MATCH不需要匹配任何內容來進行查詢。 這就是為什么它是“可選的”。

這是做你想做的事情的一種方法:

MATCH (x:a)-->(y:a)
WHERE x.type = "group" AND NOT (y)-->(:b)
RETURN y

暫無
暫無

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

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