簡體   English   中英

Gremlin查詢,返回鍵/值列表,其中key是頂點ID,而value是特定屬性的值

[英]Gremlin query that returns key/value list where key is the vertex ID and value is value of a specific property

我開始學習圖形數據庫,並用Gremlin查詢語言進行查詢以尋求概念證明。

假設我有一個表示特定類型螺栓的頂點,並且每個屬性都表示該螺栓可用的材料和成本。

id: bolt-123,
label: part,
properties: [
    { steel : 0.05 },
    { aluminum : 0.02 },
    { iron : 0.03 },
    { plastic : 0.01 }
]

我希望能夠獲得所有由塑料制成的螺栓及其成本的清單。 以我目前對Gremlin的有限了解,我已經能夠提出以下查詢:

g.V().hasLabel('part').has('plastic').project('key', 'value').by('id').by('plastic')

導致

[ { "key": "bolt-123", "value": 0.01 },
  { "key": "bolt-456", "value": 0.02 } ]

盡管此查詢對我來說很有意義,但我希望將其簡化一些,以便可以:

[ { "bolt-123", 0.01 },
  { "bolt-456", 0.02 } ]

感謝您幫助Gremlin新手。

如果只需要Map的值,則可以將select(values)追加到遍歷的末尾,它將刪除鍵。 我將以“現代”圖為例:

gremlin> g.V().project('k','v').by(id).by('name').select(values)
==>[1,marko]
==>[2,vadas]
==>[3,lop]
==>[4,josh]
==>[5,ripple]
==>[6,peter]

當然,如果您不需要Map那么我一開始就不必費心project() ,只需創建值List

gremlin> g.V().map(union(id(),values('name')).fold())
==>[1,marko]
==>[2,vadas]
==>[3,lop]
==>[4,josh]
==>[5,ripple]
==>[6,peter]

如果您想要顯示的確切輸出,則可以使用group()List強制轉換為Map

gremlin> g.V().
......1>   map(union(id(),values('name')).
......2>       fold().
......3>       group().
......4>         by(limit(local,1)).
......5>         by(tail(local)))
==>[1:marko]
==>[2:vadas]
==>[3:lop]
==>[4:josh]
==>[5:ripple]
==>[6:peter]

它基本上是獲取每個List並從列表中的第一項以limit(local,1)獲取Map的鍵,然后從列表中的第二項以tail(local)

當然,現在我想到的是,如果您的“ id”確實是唯一的,那么您可以省略union()而只需執行group()

gremlin> g.V().group().by(id()).by(values('name').unfold())
==>[1:marko,2:vadas,3:lop,4:josh,5:ripple,6:peter]

請注意,我故意by(values('name').unfold())代替了by('name')因為后者會將結果包裝在List

暫無
暫無

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

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