2013-03-25 53 views
1

上更新的唯一索引值

獨特= create_or_fail

創建一個新的節點時,因爲它拋出一個4XX響應,如果重複的索引鍵/值已經存在的偉大工程的Neo4j Uniquness。

但是,如果節點已經存在和索引,需要更新的索引值,也沒有辦法(據我所知),以更新的值,如果新的值已經存在失敗。這是因爲如果新值已經存在,則添加節點到索引REST調用不會引發4xx響應。就我所見,索引的添加節點甚至不參與索引的唯一性。

一種解決方法是刪除節點,並重新添加它,但是這並不容易,因爲所有其他指標,在此節點上的關係將不得不重新創建。

另一種解決方案是將唯一參數添加到添加節點,以指數REST調用 http://docs.neo4j.org/chunked/1.9.M05/rest-api-indexes.html#rest-api-add-node-to-index

對此有什麼其他的想法?

感謝

+0

通常唯一參數。什麼是你的具體用例?您可以使用REST的API指數的看跌期權,如果非存在的語義和如果成功刪除舊的值從指數這個節點。 – 2013-03-25 23:44:18

+0

,如果你有一個用戶的電子郵件地址的唯一索引和用戶更新他們的地址,例如。在這種情況下,你不會想創建,因爲所有的現有關係的一個新用戶節點將不得不重新創建。什麼是好的是在插入到索引調用中具有相同的唯一性參數。這將在成功時返回200,在衝突時返回4xx。如果成功,批處理中的下一個命令將是從索引中刪除。所以就你而言,這不會是一個更新。它是插入和刪除索引值並在批處理事務中完成的。 – KanTube 2013-03-26 16:42:00

回答

0

我發生了這個問題,這裏就是我想出了一個變通。

在更新過程中做作爲一個REST批次如下:

  1. 刪除所有節點的索引條目爲所需的索引
  2. 創建所需的索引使用CreateOrFail,只是不使用新節點的正常的性只是用一個虛擬的財產,如DeleteMe=true
  3. 節點添加到所需的索引,因爲如果走到這一步之前的步驟成功
  4. 更新節點的屬性
  5. 使用暗號語句刪除虛擬節點例如:未更新

    START n=node:index_name(index_key={value}) WHERE (n.DeleteMe!)=true DELETE n