在Neo4j的2.0.0-M05我用來做Neo4j 2.0.0-RC1每個關係的可選關係被刪除?
START n=node(*) MATCH n-[r?]-() WHERE ID(n) <> 0 AND ID(n) <> 1 DELETE n, r
要刪除整個數據庫除節點0和1.現在Noe4j 2.0.0-RC1,我不能再使用了問號。而是我必須使用可選關鍵字這樣的:
START n=node(*) OPTIONAL MATCH n-[r]-() WHERE ID(n) <> 0 AND ID(n) <> 1 DELETE n, r
1題
它匹配節點1
neo4j-sh (?)$ START n=node(*) OPTIONAL MATCH n-[r]-() WHERE ID(n) <> 1 RETURN n, r;
+--------------------+
| n | r |
+--------------------+
| Node[1]{} | <null> |
+--------------------+
(節點0在查詢的時刻是不存在於數據庫中)
這當然不僅僅是這個查詢的問題,而是整個應用程序中我需要使用類似的查詢。
問題2
由於它在我看來這引入了嚴重的設計缺陷。也許我的推理是關閉的,而且由於問題1我還無法測試它。但OPTIONAL
關鍵字嚴重限制了查詢的可能性。正如在這裏公告所寫的,http://blog.neo4j.org/2013/11/neo4j-200-rc1-final-preparations.htmlOPTIONAL
可以比作OUTER JOIN
。爲了跟上這種從節點到節點的跳變,就像增加一個額外的連接一樣。
所以
前MATCH (a)-[x]-(b)-[y?]-(c) RETURN a, b, c
會像做
SELECT a, b, c FROM ??
INNER JOIN x ON ??
LEFT OUTER JOIN y ON ??
(到位問號,因爲暗號不轉化爲SQL)
但不可用可選關鍵字要麼你讓所有的加入OUTER JOIN
或所有加入INNER JOIN
(沒有可選關鍵字)。沒有混合的內部/外部連接查詢,我的應用程序不起作用。對我來說,使關係可選PER HOP是非常基本的。所以要麼我必須留在M06(支持問號的最新版本)或嘗試其他數據庫。
簽名,
絕望的開發人員。
非常感謝你,一切都與你的查詢解決。信仰已經恢復!事情開始再次匹配感覺:)謝謝。 – Flip
沒問題。我剛剛發佈了這個:http://wes.skeweredrook.com/cypher-2-0-optional-match/ –