簡體   English   中英

OrientDB的SQL更新邊緣?

[英]orientdb sql update edge?

我一直在與orientdb sql糾纏在一起,我想知道是否有一種方法可以更新頂點的邊緣以及其中的一些數據。

假設我具有以下數據:頂點:人,房間邊緣:內部(從人到房間)

就像是:

UPDATE Persons SET phone=000000, out_Inside=(
    select @rid from Rooms where room_id=5) where person_id=8

顯然,以上方法不起作用。 它引發異常:

Error: java.lang.ClassCastException: com.orientechnologies.orient.core.id.ORecordId cannot be cast to com.orientechnologies.orient.core.db.record.ridbag.ORidBag

我試圖在github上查看源代碼,以查找帶有1個項的bag的語法,但是找不到任何語法(找到%,但這似乎是針對SQL的序列化)。

(1)那有什么辦法嗎? 如何更新連接? 有沒有辦法,還是我被迫創建一個新的邊並刪除舊的邊?

(2)在撰寫本文時,我想到也許在這種情況下,邊緣不是可行的方法。 也許我應該改用LINK。 我不得不說我不確定何時使用哪個,或者使用它們中的任何一個意味着什么。 我確實發現了這一點:

https://groups.google.com/forum/#!topic/orient-database/xXlNNXHI1UE

Lvc @的頂部評論3,他說:

"The suggested way is to always create an edge for relationships"

另外,即使我應該使用鏈接,也請回復(1)。 無論如何我都會很高興知道答案。

ps在我的情況下,一個人只能在一個房間里。 將來這很可能不會改變。 顯然,該邊緣的優勢在於,萬一我可能想要更改它(無論如何不太可能),它將非常容易。

解決方案(部分)

(1)解決方案只是刪除字段選擇。 感謝Lvca指出!

(2)-仍不確定-

CREATE EDGEDELETE EDGE命令的目標是:避免用戶與底層結構發生沖突。

但是,如果要這樣做(有點“臟”),請嘗試以下一種方法:

UPDATE Persons SET phone=000000, out_Inside=(
  select from Rooms where room_id=5) where person_id=8
update EDGE Custom_Family_Of_Custom 
set survey_status = '%s', 
apply_source = '%s' 
where @rid in (
select level1_e.@rid from (
MATCH {class: Custom, as: custom, where: (custom_uuid = '%s')}.bothE('Custom_Family_Of_Custom') {as: level1_e} .bothV('Custom') {as: level1_v, where: (custom_uuid = '%s')} return level1_e
)
)

它運作良好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM