是否與暗號的可能性不使用基於性能有一定的關係?查詢只使用關係沒有一個給定的屬性
我們有一個新的要求,指出關係不應該被硬刪除,但應該得到一個標誌,「刪除=真」,讓我們種有我們的節點的關係的審計線索。 (類似於X的朋友是Y的朋友,但是對於所有關係類型而言更復雜一點)
這是在一個密碼查詢中通過使用WHERE r.deleted = false
而可行的,但是在更復雜的查詢中可能會遍歷4-5關係類型更難。
有沒有一種簡單的方法,只是說,Neo4j的不應該使用屬性「已刪除」設置爲true什麼關係?
是否與暗號的可能性不使用基於性能有一定的關係?查詢只使用關係沒有一個給定的屬性
我們有一個新的要求,指出關係不應該被硬刪除,但應該得到一個標誌,「刪除=真」,讓我們種有我們的節點的關係的審計線索。 (類似於X的朋友是Y的朋友,但是對於所有關係類型而言更復雜一點)
這是在一個密碼查詢中通過使用WHERE r.deleted = false
而可行的,但是在更復雜的查詢中可能會遍歷4-5關係類型更難。
有沒有一種簡單的方法,只是說,Neo4j的不應該使用屬性「已刪除」設置爲true什麼關係?
不完全符合您的要求,但您也可以將關係類型從SOMETHING
更改爲SOMETHING_DELETED
。然後當你指定遍歷時,你可以跳過這些關係。
查詢這樣
(用戶) - [:朋友{刪除: '假'}] - >(F) - [:works_in {刪除: '假'} ] - (公司)
事實上,隨着圖模型的發展,保持deleted
屬性很快變得難以管理:屬性會滲透到每個查詢中。據我所知,Neo4j沒有提供任何幫助。
不過,我已經受夠了albertoperdomo的做法成功。幾個月前的一些細節在a question I asked here。
要替換要軟刪除節點的兩件事情:他們的標籤(因此他們不能直接查找)和他們的關係(因此他們不能從其他節點到達)。在我的例子中,我只是用一個下劃線(_)加上標籤和關係類型。
好處很明顯:您現有的查詢(可能!)安全,因爲軟刪除的節點不再被考慮(它們不能再被訪問,除非您明確地忽略關係類型,即(a)--(b)
或東西)。
我也喜歡認爲這是實現軟刪除,因爲你有效地切斷你的圖件的最高效的方式 - 而不是在物業配套(即使它索引)。
有一個陷阱,但是。 替代沒有通用的方法標籤和關係。你不能,例如說一些沿線:
match (:Person {id: 123})-[r]-()
set type(r) = '_' + type(r);
你必須分別替換每個標籤和關係,每種類型的節點,你有。事情也變得很棘手,如果關係是可選的,因爲它很難在整個查詢(因此my initial question)的「扛」你的初始節點。
我解決了,這是由該查詢的不同部分串聯起來與UNION
方式:
MATCH (review:Review {Id: {id}})<-[wrote:WROTE_REVIEW]-(owner)
DELETE wrote CREATE (review)<-[:_WROTE_REVIEW]-(owner)
UNION
MATCH (review:Review {Id: {id}})-[evaluates:EVALUATES]->(product)
DELETE evaluates CREATE (review)-[:_EVALUATES]->(product)
UNION
...
UNION
MATCH (review:Review {Id: {id}})
REMOVE review:Review") SET review:_Review;
是的,你是MATCH
荷蘭國際集團在每個子查詢的同一個節點,但我認爲對性能的影響如果你的屬性被索引,但主要是因爲你創建/讀取節點的次數比刪除它們多得多(否則,你的數據庫將會是空的!)是可以忽略不計的!
+1,好主意,獎勵效率 –