Query Apache Tinkerpop GraphDB using Gremlin -- Explain the "As" Step
2019年06月19日
['josh', 'peter']
['marko', 'vadas', 'lop', 'josh', 'ripple', 'peter']
前后有对应关系
[{'a': 'josh', 'b': 'josh'}, {'a': 'peter', 'b': 'peter'}]
NB
The term as is a reserved word in Python, and therefore must be referred to in Gremlin with as_().
References
As Step
*
This post experiment is based on TinkerPop Gremlin sample dataset "modern toy graph".
as_()所代表的集合中的元素会随着and(),where()等判断条件而被去除。
寻找发起created但是没有发起knows的V。
from gremlin_python.process.graph_traversal import __ g.V().as_('a').where( __.as_('a').outE('created').and_().not_(__.as_('a').outE('knows')) ).as_('a').values('name').toList()结果:
['josh', 'peter']
g.V().as_('a').values('name').toList()结果:
['marko', 'vadas', 'lop', 'josh', 'ripple', 'peter']
前后有对应关系
g.V().as_('a').where( __.as_('a').outE('created').and_().not_(__.as_('a').outE('knows')) ).as_('b').select('a', 'b').by('name').toList()结果:
[{'a': 'josh', 'b': 'josh'}, {'a': 'peter', 'b': 'peter'}]
g.V().as_('a').out('created').as_('b').select('a','b').toList()结果:
[{'a': v[1], 'b': v[3]}, {'a': v[4], 'b': v[3]}, {'a': v[6], 'b': v[3]}, {'a': v[4], 'b': v[5]}]
g.V().as_('a').out('created').as_('b').select('a','b').by('name').toList()结果:
[{'a': 'marko', 'b': 'lop'}, {'a': 'josh', 'b': 'lop'}, {'a': 'peter', 'b': 'lop'}, {'a': 'josh', 'b': 'ripple'}]
g.V().hasLabel('software').as_('a','b','c').select('a','b','c').by('name').by('lang').by(__.in_('created').values('name').fold()).toList()结果:
[{'a': 'lop', 'b': 'java', 'c': ['marko', 'josh', 'peter']}, {'a': 'ripple', 'b': 'java', 'c': ['josh']}]
NB
The term as is a reserved word in Python, and therefore must be referred to in Gremlin with as_().
References
As Step