gremlin語句詳解

到了新公司用到了tinkerPop的gremlin語句,由於是全英文的文檔。爲了杜絕我魚記憶,決定整理一下以後查看方便。嗯嗯~ o(* ̄▽ ̄*)o

附圖:語句來源於圖片


初步認識:

點:藍色的圈代表頂點(查詢語句中的V()),圈中的person代表頂點的名稱,name和age爲頂點的屬性。

邊:黑色的線代表邊(查詢語句中的E()),線上的knows代表邊的名稱,weight爲邊的屬性。

一、Lambda Step

四個基礎的步驟:map ,flatMap ,filter,sideEffect,branch

1. 查找節點屬性

(1). V(1)=查詢圖中第一個頂點  .out() = 輸出的頂點  .values("name") = 屬性爲name的值 

(查詢第一個頂點所有邊中向外指的頂點,返回這些頂點的name的值)

gremlin> g.V(1).out().values('name')

==>lop

==>vadas

==>josh

(2).返回相同的數據使用map的方式

gremlin> g.V(1).out().map {it.get().value('name')}

==>lop

==>vadas

==>josh

2. has has的用法類似於過濾器的作用

(1).查找所有頂點中label邊的值爲person的(默認返回節點信息)

gremlin> g.V().hasLabel('person')

==>v[1]

==>v[2]

==>v[4]

==>v[6]

(2).使用過濾器filter的方式查找

gremlin> g.V().filter {it.get().label() == 'person'}

==>v[1]

==>v[2]

==>v[4]

==>v[6]

3. 進入sideEffect() 的任何內容都被傳遞到下一個步驟,但可能會發生一些中間過程。

gremlin> g.V().hasLabel('person').sideEffect(System.out.&println)

v[1]

==>v[1]

v[2]

==>v[2]

v[4]

==>v[4]

v[6]

==>v[6]

4.choose()和branch()

解釋:返回頂點的姓名,如果姓名爲marko則返回年齡,其他的返回姓名。

gremlin> g.V().branch(values('name')).option('marko', values('age')).option(none, values('name'))

==>29

==>vadas

==>lop

==>josh

==>ripple

==>peter

gremlin> g.V().choose(has('name','marko'),values('age'),values('name'))

==>29

==>vadas

==>lop

==>josh

==>ripple

==>peter

二、AddEdge Step

此部分的主要功能是爲已有的圖形添加新的邊。


1.addE()例一 以上圖爲例

解釋:第一個頂點命名爲a,查找出邊爲created的點(3),再次查找入邊爲created的點,並且這個點不是a,添加一條邊,邊的名稱爲co-developer,從a發出屬性爲:year,2009.

gremlin> g.V(1).as('a').out('created').in('created').where(neq('a')).addE('co-developer').from('a').property('year',2009)

==>e[12][1-co-developer->4]

==>e[13][1-co-developer->6]

2.addE()例二 敲打

gremlin> g.V(3,4,5).aggregate('x').has('name','josh').as('a').select('x').unfold().hasLabel('software').addE('createdBy').to('a')

==>e[14][3-createdBy->4]

==>e[15][5-createdBy->4]

3.addE()例三

解釋:所有頂點爲a,查找出邊爲created的頂點(3),增加邊名稱爲createdBy,新增的邊出點爲a,屬性名爲acl,public。

gremlin> g.V().as('a').out('created').addE('createdBy').to('a').property('acl','public')

==>e[16][3-createdBy->1]

==>e[17][5-createdBy->4]

==>e[18][3-createdBy->4]

==>e[19][3-createdBy->6]

4.addE()例四 敲打

gremlin> g.V(1).as('a').out('knows').addE('livesNear').from('a').property('year',2009).inV().inE('livesNear').values('year')

==>2009

==>2009

5.addE()例五 敲打

gremlin> g.V().match(__.as('a').out('knows').as('b'),__.as('a').out('created').as('c'),__.as('b').out('created').as('c')).addE('friendlyCollaborator').from('a').to('b').property(id,13).property('project',select('c').values('name'))

==>e[13][1-friendlyCollaborator->4]

三、AddVertex Step

addE()例五 這個過程是用戶給圖形增加頂點,對於每一個傳入對象,都創建一個頂點。此外,GraveTraceSaleStand維護了一個addV()方法。

1.例一 新增一個頂點person,屬性爲name=stephen。

gremlin> g.addV('person').property('name','stephen')

==>v[12]

2.例二 查看所有頂點的name

gremlin> g.V().values('name')

==>marko

==>vadas

==>lop

==>josh

==>ripple

==>peter

==>stephen

3.例三 所有頂點出邊爲knows,新增頂點,屬性名爲name=nothing。

gremlin> g.V().outE('knows').addV().property('name','nothing')

==>v[14]

==>v[16]

4.例四 查看所有頂點中name=nothing的id

gremlin> g.V().has('name','nothing')

==>v[16]

==>v[14]

四、AddProperty Step

addProperty()用戶給圖中的對象增加屬性。不同於addV()和addE()

1.例一 給頂點1創建屬性country=usa

gremlin> g.V(1).property('country','usa')

==>v[1]

2.例二 給頂點1創建屬性city=sanfa fe,state=new mexico並返回所有屬性名。

gremlin> g.V(1).property('city','santa fe').property('state','new mexico').valueMap()

==>[country:[usa], city:[santa fe], name:[marko], state:[new mexico], age:[29]]

3.例三 給頂點1創建屬性age=35

gremlin> g.V(1).property(list,'age',35)

==>v[1]

4.例四 返回頂點1的所有屬性值

gremlin> g.V(1).valueMap()

==>[country:[usa], city:[santa fe], name:[marko], state:[new mexico], age:[29, 35]]

5.例五 給頂點1增加屬性friendWeight輸出邊爲knows的值爲weight之和,屬性爲ac=private

gremlin> g.V(1).property('friendWeight',outE('knows').values('weight').sum(),'acl','private')

==>v[1]

6.例六 查詢頂點1的friendWeight的屬性。

gremlin> g.V(1).properties('friendWeight').valueMap()

==>[acl:private]

五、Aggregate Step

aggregte()用於遍歷所有特定的對象集合在一起。

1.例一

查找頂點1輸出邊是created的點(3)

gremlin> g.V( 1 ).out( 'created' )

==>v[3]

將所有頂點1輸出邊爲created的頂點聚合爲x

gremlin> g.V(1).out('created').aggregate('x')

==>v[3]

查找所有頂點1輸出邊爲created的頂點(3),再查找輸入邊爲created的所有頂點

gremlin> g.V(1).out('created').aggregate('x').in('created')

==>v[1]

==>v[4]

==>v[6]

查找所有頂點1輸出邊爲created的頂點(3),再查找輸入邊爲created的所有頂點,再查找輸出邊爲created的頂點

gremlin> g.V(1).out('created').aggregate('x').in('created').out('created')

==>v[3]

==>v[5]

==>v[3]

==>v[3]

查找所有頂點1輸出邊爲created的頂點(3),再查找輸入邊爲created的所有頂點,再查找輸出邊爲created的頂點。過濾所有x(x = 頂點1輸出邊爲created的頂點 = 3)的集合並輸出name值。

gremlin> g.V(1).out('created').aggregate('x').in('created').out('created').where(without('x')).values('name')

==>ripple

六、And Step

and()同時滿足and()要求的條件並輸出。

1.例一 滿足兩個條件1.g.V().outE('knows') 2.g.V().values('age').is(lt(30))的名字

gremlin> g.V().and(outE('knows'),values('age').is(lt(30))).values('name')

==>marko

七、As Step

as(),是一步虛擬的操作,類似於by()和option().

1.例一 所有頂點命名爲a,輸出邊爲created的頂點命名爲b,查詢a和b。

gremlin> g.V().as('a').out('created').as('b').select('a','b')

==>[a:v[1], b:v[3]]

==>[a:v[4], b:v[5]]

==>[a:v[4], b:v[3]]

==>[a:v[6], b:v[3]]

八、By Step

by(),是一步虛擬的操作,一般用於通過條件分組查詢。

1.例一 查詢所有頂點,通過邊的數量分組查詢數量

gremlin> g.V().group().by(bothE().count())

==>[1:[v[2], v[5], v[6]], 3:[v[1], v[3], v[4]]]

2.例二 查詢所有頂點,通過邊的數量分組查詢姓名

gremlin> g.V().group().by(bothE().count()).by('name')

==>[1:[vadas, ripple, peteby(),是一步虛擬的操作,一般用於通過條件分組查詢。, lop, josh]]

3.例三 查詢所有頂點,通過邊的數量分組查詢每組的數量

gremlin> g.V().group().by(bothE().count()).by(count())

==>[1:3, 3:3]

九、Cap Step

十、Coalesce Step

by(),是一步虛擬的操作,一般用於通過條件分組查詢。

十一、Count Step

count(),統計遍歷總數。

1.例一 統計所有頂點的總數

gremlin> g.V().count()

==>6

2.例二 統計所有頂點中label爲person的總數

gremlin> g.V().hasLabel('person').count()

==>4

3.例三 查詢頂點label值爲person的輸出邊爲created的數量,返回查詢路徑。

gremlin> g.V().hasLabel('person').outE('created').count().path()

==>[4]

4.例四 查詢頂點label值爲person的輸出邊爲created的數量,遍歷其內容 乘10返回路徑。

gremlin> g.V().hasLabel('person').outE('created').count().map {it.get() * 10}.path()

==>[4, 40]

十二、Choose Step

choose()步驟,類似於if-else的步驟,判斷條件走不同的路徑。

1.例一 查找所有頂點中label爲person的頂點,如果屬性age小於30,查找入邊的頂點,否則查找出邊的頂點。

(頂點1age小於30沒有入邊無結果,頂點4age大於30查找出邊頂點爲3:name=lop和5:name=ripple)

gremlin> g.V().hasLabel('person').choose(values('age').is(lte(30)),__.in(),__.out()).values('name')

==>marko

==>ripple

==>lop

==>lop

2.例二 查找所有頂點中label爲person的頂點,如果age爲27則輸出該頂點的入邊頂點,如果age爲32則輸出該頂點的出邊頂點。

(頂點2age爲27,入邊的頂點爲1:name=marko,頂點4age爲32,出邊的頂點爲3:name=lop,5:name=ripple)

gremlin>g.V().hasLabel('person').choose(values('age')).option(27,__.in()).option(32,__.out()).values('name')

==>marko

==>ripple

==>lop

十三、Coin Step

十四、Constant Step

constant()步驟,定義成常量。

1.例一 查詢所有頂點,如果label名爲person則返回名字,否則返回常量名爲inhuman。

gremlin> g.V().choose(hasLabel('person'),values('name'),constant('inhuman'))

==>marko

==>vadas

==>inhuman

==>josh

==>inhuman

==>peter

十五、CyclicPath Step

十六、Dedup Step

dedup()步驟,過濾重複數據。

1. 例一 查詢所有名爲lang的頂點。dedup()過濾到重複的數據。

gremlin> g.V().values('lang')

==>java

==>java

gremlin> g.V().values('lang').dedup()

==>java

十七、Drop Step

drop()步驟,刪除指定的元素或屬性。

1. 例一 查詢所有頂點中屬性名爲name並刪除,遍歷查詢所有的頂點(name的屬性已被刪除)

gremlin> g.V().properties('name').drop()

gremlin> g.V().valueMap()

==>[age:[29]]

==>[age:[27]]

==>[lang:[java]]

==>[age:[32]]

==>[lang:[java]]

==>[age:[35]]

2.例二 查詢並刪除所有頂點(查詢最後結果爲空)

gremlin> g.V().drop()

gremlin> g.V()

十八、Explain Step

好像是用來解釋的,沒什麼實質的作用

十九、Fold Step

fold()遍歷所有的對象,並把他們聚合在一起。

1. 例一:查詢頂點1出邊爲knows的name值,fold()聚合在一起爲一個數組。

gremlin> g.V(1).out('knows').values('name')

==>vadas

==>josh

gremlin> g.V(1).out('knows').values('name').fold()

==>[vadas, josh]

二十、Graph Step

V-()步驟通常用於啓動一個圖形遍歷,但也可以用於中間遍歷。

1.例一 查找所有頂點name爲marko,vadas或josh命名爲person,再次查詢所有頂點中name爲lop或ripple,增加名爲uses的邊,從person發出。

gremlin> g.V().has('name', within('marko', 'vadas', 'josh')).as('person').V().has('name', within('lop', 'ripple')).addE('uses').from('person')

==>e[12][1-uses->3]

==>e[13][1-uses->5]

==>e[14][2-uses->3]

==>e[15][2-uses->5]

==>e[16][4-uses->3]

==>e[17][4-uses->5]

二十一、Group Step

group()步驟主要用於分組。

1.例一 通過頂點的label值對頂點進行分類

gremlin> g.V().group().by(label)

==>[software:[v[3], v[5]], person:[v[1], v[2], v[4], v[6]]]

2.例二 通過頂點的label值對頂點進行分類,獲得他們的姓名。

gremlin> g.V().group().by(label).by('name')

==>[software:[lop, ripple], person:[marko, vadas, josh, peter]]

3.例三 通過頂點的label數量進行分類。

gremlin> g.V().group().by(label).by(count())

==>[software:2, person:4]

二十二、GroupCount Step

groupCount()步驟主要用於統計分組後的數量。

1.例一 通過頂點的label值對頂點進行分類

主要用於統計分組

1.例一 查詢頂點label爲person的年齡分佈情況。

gremlin> g.V().hasLabel('person').values('age').groupCount()

==>[32:1, 35:1, 27:1, 29:1]

2.例二 同例一

gremlin> g.V().hasLabel('person').groupCount().by('age')

==>[32:1, 35:1, 27:1, 29:1]

二十三、Has Step

has() 作用可以過濾頂點,過濾邊以及過濾屬性。

例如:

  • has(key,value): 刪除沒有提供的鍵值對屬性。

  • has(key,predicate): 刪除沒有提供的鍵值。

  • hasLabel(labels...): 刪除沒有對應label屬性的內容。

  • hasId(ids...): 刪除沒有對應id屬性的內容。

  • has(key): 刪除沒有該健的值的內容。

  • hasNot(key): 刪除有對應健的內容。

  • has(key, traversal)  : 遍歷沒有結果的則刪除

1.例一 查詢所有頂點中label爲person的頂點。

gremlin> g.V().hasLabel('person')

==>v[1]

==>v[2]

==>v[4]

==>v[6]

2.例二 查詢所有頂點中label爲person的輸出的頂點,並且name=vadas或josh。

gremlin> g.V().hasLabel('person').out().has('name',within('vadas','josh'))

==>v[2]

==>v[4]

3.例三 查詢所有頂點中label爲person的輸出的頂點,並且name=vadas或josh,輸出邊label爲created的邊。

gremlin> g.V().hasLabel('person').out().has('name',within('vadas','josh')).outE().hasLabel('created')

==>e[10][4-created->5]

==>e[11][4-created->3]

4.例四 查詢所有頂點中年齡在20~30之間的。

gremlin> g.V().has('age',inside(20,30)).values('age')

==>29

==>27

5.例五 查詢所有頂點中年齡不在20~30之間的。

gremlin> g.V().has('age',outside(20,30)).values('age')

==>32

==>35

6.例六 查詢所有頂點中姓名爲josh和marko的並遍歷屬性。

gremlin> g.V().has('name',within('josh','marko')).valueMap()

==>[name:[marko], age:[29]]

==>[name:[josh], age:[32]]

7.例七 查詢所有頂點中姓名不爲josh和marko的並遍歷屬性

gremlin> g.V().has('name',without('josh','marko')).valueMap()

==>[name:[vadas], age:[27]]

==>[name:[lop], lang:[java]]

==>[name:[ripple], lang:[java]]

==>[name:[peter], age:[35]]

8.例八 查詢所有頂點中姓名不爲josh和marko的並遍歷屬性

gremlin> g.V().has('name',not(within('josh','marko'))).valueMap()

==>[name:[vadas], age:[27]]

==>[name:[lop], lang:[java]]

==>[name:[ripple], lang:[java]]

==>[name:[peter], age:[35]]

二十五、Is Step

is()類似於等於的作用。

1.例一 查詢所有頂點中age=32的頂點。

gremlin> g.V().values('age').is(32)

==>32

2.例二 查詢所有頂點中age<30的頂點。

gremlin> g.V().values('age').is(lte(30))

==>29

==>27

3.例三 查詢所有頂點中age在30到40之間的頂點。

gremlin> g.V().values('age').is(inside(30, 40))

==>32

==>35

4.例四 查詢所有頂點,條件爲入邊爲created並且數量爲1,顯示name。

gremlin> g.V().where(__.in('created').count().is(1)).values('name')

==>ripple

5.例五 查詢所有頂點,條件爲入邊爲created並且數量大於2,顯示name。

gremlin> g.V().where(__.in('created').count().is(gte(2))).values('name')

==>lop

6.例六 查詢所有頂點,平均值在30到35之間。

gremlin> g.V().where(__.in('created').values('age').mean().is(inside(30d, 35d))).values('name')

==>lop

==>ripple

二十六、Limit Step

Limit()的主要作用和Range()類似,主要用於限制最小條數。

1.例一 查詢所有頂點的前兩條。

gremlin> g.V().limit(2)

==>v[1]

==>v[2]

二十七、Local Step

二十八、Match Step

二十九、Max Step

Max()的作用查找流中最大的值

1.例一 兩種方式查找age最大的值。

gremlin> g.V().values('age').max()

==>35

gremlin> g.V().repeat(both()).times(3).values('age').max()

==>35

三十、Mean Step

mean()的主要作用用於求平均值。

1.例一 查詢所有頂點的平均值

gremlin> g.V().values('age').mean()

==>30.75

2.例二 查詢所有頂點,查詢三次所有邊,計算年齡的平均值

gremlin> g.V().repeat(both()).times(3).values('age').mean()

==>30.645833333333332

3.例三 查詢所有頂點,查詢三次所有去重邊,計算年齡的平均值

gremlin> g.V().repeat(both()).times(3).values('age').dedup().mean()

==>30.75

三十一、Min Step

Min()的作用查找流中最小的值

1.例一 兩種方式查找age最小的值。

gremlin> g.V().values('age').min()

==>27

gremlin> g.V().repeat(both()).times(3).values('age').min()

==>27

三十二、Or Step

or()或者的作用滿足條件之一即可返回數據

1.例一 查找頂點的輸出邊爲created或者輸入邊爲created的數量大於1.

gremlin> g.V().or(__.outE('created'),__.inE('created').count().is(gt(1))).values('name')

==>marko

==>lop

==>josh

==>peter

三十三、Order Step

order()當需要對遍歷流的對象進行排序時,可以利用Order()

1.例一 查詢頂點的姓名並進行排序

gremlin> g.V().values('name').order()

==>josh

==>lop

==>marko

==>peter

==>ripple

==>vadas

2.例二 查詢頂點的姓名並進行倒序排序

gremlin> g.V().values('name').order().by(decr)

==>vadas

==>ripple

==>peter

==>marko

==>lop

==>josh

3.例三 查詢label爲person的頂點,並使用age進行升序排序,顯示其姓名。

gremlin> g.V().hasLabel('person').order().by('age', incr).values('name')

==>vadas

==>marko

==>josh

==>peter

三十四、Path Step


path()的作用主要用於查詢每一步的路徑。

1.例一 查詢頂點輸出頂點的輸出頂點的姓名。

gremlin> g.V().out().out().values('name')

==>ripple

==>lop

1.例一 查詢頂點輸出頂點的輸出頂點的姓名的路徑。

gremlin> g.V().out().out().values('name').path()

==>[v[1], v[4], v[5], ripple]

==>[v[1], v[4], v[3], lop]

2.例二 如果邊緣在路徑中是必須的。

gremlin> g.V().outE().inV().outE().inV().path()

==>[v[1], e[8][1-knows->4], v[4], e[10][4-created->5], v[5]]

==>[v[1], e[8][1-knows->4], v[4], e[11][4-created->3], v[3]]

3.例三 如果by()在路徑中是必須的。

gremlin> g.V().out().out().path().by('name').by('age')

==>[marko, 32, ripple]

==>[marko, 32, lop]

三十五、Profile Step

允許配置遍歷的信息等。

三十六、Range Step

range()的主要作用是限制查詢的條數

1.例一 查找所有頂點從下標1的開始查詢3條。

gremlin> g.V().range(1,3)

==>v[2]

==>v[3]

三十七、Repeat Step

repeat()用於對給定的條件 進行循環。

1.例一 查詢頂點1的輸出頂點的路徑循環兩次,並顯示其名字。

gremlin> g.V(1).repeat(out()).times(2).path().by('name')

==>[marko, josh, ripple]

==>[marko, josh, lop]

2.例二 查詢所有頂點輸出的頂點路徑,顯示名字,直到name=ripple時停止。

gremlin> g.V().until(has('name','ripple')).repeat(out()).path().by('name')

==>[marko, josh, ripple]

==>[josh, ripple]

==>[ripple]

三十八、Sack Step

三十九、Select Step

select()查詢過濾需要顯示的內容

1.例一 所有的頂點爲a,輸出的頂點爲b,再次輸出的頂點爲c,查詢a,b,c。

gremlin> g.V().as('a').out().as('b').out().as('c').select('a','b','c')

==>[a:v[1], b:v[4], c:v[5]]

==>[a:v[1], b:v[4], c:v[3]]

2.例二 所有的頂點爲a,輸出的頂點爲b,再次輸出的頂點爲c,查詢a,b。

gremlin> g.V().as('a').out().as('b').out().as('c').select('a','b')

==>[a:v[1], b:v[4]]

==>[a:v[1], b:v[4]]

3.例三 所有的頂點爲a,輸出的頂點爲b,再次輸出的頂點爲c,查詢a,b並返回姓名。

gremlin> g.V().as('a').out().as('b').out().as('c').select('a','b').by('name')

==>[a:marko, b:josh]

==>[a:marko, b:josh]

四十、SimplePath Step

simplePath()作用爲過濾重複路徑。

1.例一 查詢頂點1的所有相鄰頂點(2,3,4),再次查詢相鄰的頂點(1,1,4,6,3,5,1)

gremlin> g.V(1).both().both()

==>v[1]

==>v[4]

==>v[6]

==>v[1]

==>v[5]

==>v[3]

==>v[1]

2.例二 查詢頂點1的所有相鄰頂點(2,3,4),再次查詢相鄰的頂點(1,1,4,6,3,5,1),過濾重複路徑。

gremlin> g.V(1).both().both().simplePath()

==>v[4]

==>v[6]

==>v[5]

==>v[3]

3.例三 查詢頂點1的所有相鄰頂點(2,3,4),再次查詢相鄰的頂點(1,1,4,6,3,5,1),過濾重複路徑的路徑查看。

gremlin> g.V(1).both().both().simplePath().path()

==>[v[1], v[3], v[4]]

==>[v[1], v[3], v[6]]

==>[v[1], v[4], v[5]]

==>[v[1], v[4], v[3]]

四十一、Store Step

四十二、Subgraph Step

用於提取一部分子圖用於分析。

四十三、Sum Step

sum()作用查詢條件的總和

1.例一 查詢所有頂點中age的總和

gremlin> g.V().values('age').sum()

==>123

2.例二 查詢所有頂點中所有邊的時間的年齡之和

gremlin> g.V().repeat(both()).times(3).values('age').sum()

==>1471

四十四、Tail Step

tail()類似於limit()倒着獲取結果集的內容。

1.例一 獲取頂點中最後一條記錄的名稱。

gremlin> g.V().values('name').order().tail()

==>vadas

2.例二 獲取頂點中最後一條記錄的名稱。

gremlin> g.V().values('name').order().tail(1)

==>vadas

3.例三 獲取頂點中倒數三條記錄的名稱。

gremlin> g.V().values('name').order().tail(3)

==>peter

==>ripple

==>vadas

四十五、TimeLimit Step

四十六、Tree Step

四十七、Unfold Step

unfold()是fold()的反向形式,將放入數組的內容拆分出來。

1.例一 查詢頂點1的輸出頂點的集合,並增加gremlin和[1.23,2.34]的內容。

gremlin> g.V(1).out().fold().inject('gremlin',[1.23,2.34])

==>gremlin

==>[1.23, 2.34]

==>[v[3], v[2], v[4]]

2.例二 查詢頂點1的輸出頂點的集合,並增加gremlin和[1.23,2.34]的內容拆分出來。

gremlin> g.V(1).out().fold().inject('gremlin',[1.23,2.34]).unfold()

==>gremlin

==>1.23

==>2.34

==>v[3]

==>v[2]

==>v[4]

四十八、Union Step

union()支持任意數量的遍歷結果的合併的結果集。

1.例一 查詢頂點4的入點的年齡值和出點的lang值。

gremlin> g.V(4).union(__.in().values('age'),out().values('lang'))

==>29

==>java

==>java

2.例二 查詢頂點4的入點的年齡值和出點的lang值的路徑。

gremlin> g.V(4).union(__.in().values('age'),out().values('lang')).path()

==>[v[4], v[1], 29]

==>[v[4], v[5], java]

==>[v[4], v[3], java]

四十九、ValueMap Step

valueMap()映射元素的屬性表示。

1.例一 查詢所有頂點的屬性。

gremlin> g.V().valueMap()

==>[name:[marko], age:[29]]

==>[name:[vadas], age:[27]]

==>[name:[lop], lang:[java]]

==>[name:[josh], age:[32]]

==>[name:[ripple], lang:[java]]

==>[name:[peter], age:[35]]

2.例二 查詢所有頂點的屬性age的結果。

gremlin> g.V().valueMap('age')

==>[age:[29]]

==>[age:[27]]

==>[:]

==>[age:[32]]

==>[:]

==>[age:[35]]

3.例三 查詢頂點的屬性爲age和blah的結果集。

gremlin> g.V().valueMap('age','blah')

==>[age:[29]]

==>[age:[27]]

==>[:]

==>[age:[32]]

==>[:]

==>[age:[35]]

4.例四 查詢所有邊的屬性值。

gremlin> g.E().valueMap()

==>[weight:0.5]

==>[weight:1.0]

==>[weight:0.4]

==>[weight:1.0]

==>[weight:0.4]

==>[weight:0.2]

五十、Vertex Step

點是gremlin的基礎。通過這些步驟,它可以在圖「-」即「遍歷」上「移動」。

  • out(string...): 移動到邊緣標籤輸出的相鄰頂點。

  • in(string...): 移動到邊緣標籤輸出的相鄰頂點。

  • both(string...): 移動到兩個傳入和傳出相鄰頂點給邊緣標籤。

    • outE(string...): 移動到輸出的邊上。

    • inE(string...): 移動到輸入的邊上。

    • bothE(string...): 移動到輸出和輸入邊上。

    • outV(): 移動到輸出的頂點上。

  • inV(): 移動到輸入的頂點上。

  • bothV(): 移動到輸出和輸入的頂點上。

  • otherV() : 移動到不是被移動的頂點的頂點。

1.查詢頂點4的邊中爲know,created和blah的邊上。

gremlin> g.V(4).bothE('knows','created','blah')

==>e[10][4-created->5]

==>e[11][4-created->3]

==>e[8][1-knows->4]

相關文章
相關標籤/搜索