簡體   English   中英

以編程方式遍歷多個頂點時,使用頂點屬性值創建邊

[英]Use vertex property value to create edge when traversing multiple vertex programatically

我發現,當從數據庫或與列有關系的任何格式的圖形中將數據導入圖形時,我需要使用這些已經在頂點中具有的鍵來創建Edge。

如何使用已經攝取到圖中的這些FK遍歷所有創建Edge的頂點?

我需要以編程方式使其可行,因為在需要執行此步驟的地方,我有很多數據。 目前,我正在使用Gremlin.Net,因為我使用的大多數代碼已經是C#

示例:想象我吸收了一些客戶

g.addV('customer')。property('id',c_id).property('product',product_id)

和一些產品

g.addV('product')。property('id',product_id)

我想創建如下邊緣:服裝[購買->項目]如何使用ID創建邊緣? 我似乎無法在其頂點的上下文中引用屬性。

我想做類似的事情:

gVhasLabel( '顧客')為( 'C')。阿迪( '買')至(GV(c.product))

顯然,我無法執行c.product ,並且如果有使用循環的解決方案,那么遺憾的是這是不可能的,因為Cosmos Graph不支持它。

到目前為止,我一直在使用C#循環,但是即使我的示例數據也無法擴展。

也許有更好的方法可以做到這一點,但我將提供以下內容:

gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('customer').property('id', 321).property('productBought', 123)
==>v[0]
gremlin> g.addV('product').property('id', 123)
==>v[3]
gremlin> g.addV('customer').property('id', 987).property('productBought', 789)
==>v[5]
gremlin> g.addV('product').property('id', 789)
==>v[8]
gremlin> g.V().hasLabel('customer').as('c').
......1>   V().hasLabel('product').as('p').
......2>   where('p', eq('c')).
......3>     by('id').
......4>     by('productBought').
......5>   select('p').
......6>   addE('buys').from('c').to('p')
==>e[10][0-buys->3]
==>e[11][5-buys->8]

上面的概念在某種程度上基於“遍歷感應值”, 在此將對其進行更詳細的描述。

最近,我看到很多問題都在問這種問題-人們想要在沒有邊緣的情況下進行聯接(即,在頂點屬性值上進行聯接)。 那里不是圖形查詢大放異彩的地方,對於Gremlin的大多數實現(可能還有CosmosDB),這將是一個昂貴的操作,具體取決於您擁有的數據量。

當了解關系的知識時,最好生成邊緣。 因此,如果您某一時刻知道“ productBought”存在,則不應將其作為“ productBought”屬性鍵加載,而應作為“ product”頂點的邊緣加載。 在模式設計中預先做出這些選擇將在以后節省很多困難。

暫無
暫無

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

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