到了新公司用到了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]