2016-02-28 82 views
0

我來自Neo4j並評估OrientDB,並且我有一個關於類的簡單問題 - 它們在插入記錄之前是否必須存在?也就是說,在Neo4j中有'MERGE'命令,如果它不存在,它將更新或創建一個節點。類看起來大致等同於Neo4j的標籤,如果在執行MERGE時不存在標籤,它將被創建。 OrientDB中是否有類似的功能?目前,當我嘗試插入一個不存在類的記錄時,OrientDB會拋出一個異常,「在數據庫中找不到類SOME_CLASS」。在插入記錄之前,類是否必須存在?

我一直在閱讀文檔,試圖獲得各種可用數據模型的句柄,但在這個問題上我找不到任何明確的內容。我嘗試過的一件事是添加一個集羣,然後插入一個不存在的類的記錄。這工作,並在OrientDB Studio,'DB'下,我看到記錄數等於'1'的集羣;但是,新記錄的類別不會出現在「架構」下。

如果這種類型的動態類創建不可行,檢查模式中是否存在類是否可以接受,如果不存在,創建它,然後繼續創建記錄?另一個問題是,如果可以接受,這樣做是否好,還是我應該總是手動定義模式?

回答

0

如果您使用CREATE命令之一,則該對象被置於默認類中;例如:

CREATE VERTEX 
Created vertex 'V#9:0 v1' in 0.047000 sec(s). 

(在這種情況下,類是V。)

當然,如果你使用的INSERT INTO ...形式,那麼你必須指定一個類。

所以也許你的第一個問題歸結爲是否有可能改變OrientDB頂點或邊的類。

可以更改頂點的父類 - 參見 http://orientdb.com/docs/2.1/SQL-Move-Vertex.html - 但有一些重要的注意事項。

要測試某個類是否以編程方式存在,請參閱此SO條目: Check if class exists or not in orientdb

這給出了一個Java示例,但使用其他支持的語言也可能有類似的方法。

至於動態改變實體類的智慧 - 也許安全的答案是,如果你可以使用屬性標籤實現你想要的任何東西,那麼使用標籤。

相關問題