2013-09-25 44 views
0

我有兩個節點在我的Neo4j圖形數據庫,用戶節點和節點視頻創建它,我想創建它們之間的關係。在Neo4j的創建兩個節點之間的關係,但是,如果一個節點不存在於同一個呼叫

節點用戶存在是肯定的,但節點視頻可能不會。如果是這種情況,應該使用給定的ID創建,並且在它們之間創建節點關係之後也會創建。

我知道我可以先檢查是否視頻節點存在,如果它不存在,我可以先創建它。 但是可以創建視頻節點(如果它不存在的話)以及用戶和視頻節點之間的關係是在單個調用中完成的?

而且,我必須防止一些併發請求創建相同的視頻節點之前先要求完成的工作。

所以,請給我出出主意如何實現這一要求。我對圖形數據庫概念和Neo4J非常新。

回答

1

根據Stefan Ambruster的提示,我研究了Cypher中的MERGE語句,並創建了單個語句調用,實現了我創建視頻節點的目標(如果不存在),然後在我的用戶節點和視頻節點之間創建關係。

暗號:

MERGE (user:User {uuid : {user_uuid}}) 
ON CREATE user 
SET user.uuid = {user_uuid} 

MERGE (video:Video {id : {video_id}}) 
ON CREATE video 
SET video.id = {video_id} 

CREATE UNIQUE user-[:SHARED {ts : timestamp()}]->video 

這對我的需要接縫好。我還保留,我的用戶節點創建,如果它不存在,不只是視頻節點。

這個aproach /聲明有任何可能的改進或陷阱嗎?

1

當你使用Cypher和你已經對Neo4j的2.0.0-M05可以使用MERGE命令。

+0

MERGE語句是正確的工具。使用MERGE語句,我們可以確保所有對象都存在。 –

相關問題