簡體   English   中英

OrientDb-使用圖形從多個頂點中選擇

[英]OrientDb - Select from multiple vertices using graph

我剛開始使用nosql數據庫,尤其是OrientDB。 我以前的經驗是關系數據庫,主要是SQL Server。

在MSSQL中,我可以執行以下操作:

SELECT  s.url, p.title
FROM    Site s
JOIN    Page p ON s.Id = p.SiteId

它將為我提供所有頁面的表格,以及它們所屬網站的網址:

url         |   title
----------------------------
site1.com   |   page1
site1.com   |   page2
site2.com   |   page1

現在,在OrientDb中,我的理解是您應該將link用於單向關系,而將edge用於雙向關系。 由於我想知道某個網站屬於哪個頁面以及特定頁面屬於哪個網站,因此我決定在這種情況下使用邊緣。 Site和Page類/頂點已經以相似的方式創建,但是我不知道如何獲得相似的結果集。 從文檔( https://orientdb.com/docs/2.2/SQL.html ):

與SQL相對,OrientDB僅允許一個類(本討論中的類等效於表)與SQL相反,SQL允許將許多表作為目標。 如果要從2個類中進行選擇,則必須執行2個子查詢,並使用UNIONALL函數將它們聯接

他們的示例SELECT FROM E, V然后變成SELECT EXPAND( $c ) LET $a = ( SELECT FROM E ), $b = ( SELECT FROM V ), $c = UNIONALL( $a, $b ) ,但這不是事實我想要。 這導致一些類似的事情

url         |   title
----------------------------
site1.com   |   
site1.com   |   
site2.com   |   
            |   page1
            |   page2
            |   page1

我將如何像在MSSQL中那樣創建原始結果集?

附加注意事項 :我對MSSQL的培訓和經驗表明,數據庫操作應在數據庫中完成,而不是在應用程序代碼中完成。 例如,我可以做一個數據庫調用來獲取s.urls.id字段,然后進行第二次調用來獲取p.titlep.SiteId字段,然后將它們與應用程序代碼匹配。 我之所以避免這種情況,是因為多個數據庫調用的時間效率不如返回多余/冗余信息所需的時間(在我的示例中, site1.com被返回了兩次)。

也許OrientDb甚至不是一般的graph / nosql數據庫不是這種情況嗎? 相反,我應該應該進行兩次單獨的調用來獲取我需要的所有數據,即SELECT FROM Site WHERE Url = "site1.com" SELECT EXPAND(OUT("HasPages")) FROM Site WHERE Name = "site1.com"

謝謝

嘗試這個:

select Url, out("HasPages").title as title from Site unwind title

希望能幫助到你

問候

暫無
暫無

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

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