【发布时间】:2019-01-29 04:19:25
【问题描述】:
我正在构建一个 API 来获取和组织我的 janusgraph 数据库上的一些信息,但我对 gremlin 查询还比较陌生。我想知道为什么组步的第二步中的遍历会返回一些关于图的不完整信息
查询是从 gremlin python 驱动程序发送的,就好像它们是 gremlin 查询一样。起初我认为问题与它有关,但后来我直接从 gremlin 终端尝试(从 bin/gremlin.sh 运行),结果是一样的,所以我认为这不是一个错误,而是如何它的目的是。没关系,但我想了解为什么查询会导致这种情况,以及如何构建符合我需求的查询。
在示例中,我只对项目步骤使用了一个步骤,但在实际问题中,我打算使用多个步骤,如下所示:
(...).project('key1', 'key2', 'key3').by(...).by(...).by(...)
初始配置:
gremlin> g.V().has('name', 'fiber')
==>v[1]
==>v[2]
gremlin> g.V(1).in()
==>v[10]
gremlin> g.V(2).in()
==>v[20]
gremlin> g.V().has('name', 'fiber').in()
==>v[10]
==>v[20]
这就是我得到的:
gremlin> g.V().has('name', 'fiber').group().by('name').by(project('amount').by(__.in().count()))
==>{fiber={amount=1}}
gremlin> g.V().has('name','fiber').group().by('name').by(__.in().count())
==>{fiber=2}
gremlin> g.V().has('name', 'fiber').group().by('name').by(__.in())
==>{fiber=v[20]}
gremlin> g.V().has('name', 'fiber').group().by('name')
==>{fiber=[v[1], v[2]]}
这正是我所期待的:
gremlin> g.V().has('name', 'fiber').group().by('name').by(project('amount').by(__.in().count()))
==>{fiber={amount=2}}
gremlin> g.V().has('name','fiber').group().by('name').by(__.in().count())
==>{fiber=2}
gremlin> g.V().has('name', 'fiber').group().by('name').by(__.in())
==>{fiber=[v[10], v[20]]}
gremlin> g.V().has('name', 'fiber').group().by('name')
==>{fiber=[v[1], v[2]]}
【问题讨论】:
标签: graph gremlin tinkerpop3 graph-traversal