按多列分组的 Gremlin 查询(从顶点和边)
Gremlin query to group by multiple columns (from vertex, and edge)
我有一个开发人员顶点和一个项目顶点以及一个具有开始日期和结束日期属性的边。
开发人员在给定时间点只能处理一个项目。有时他们会被用户错误地分配给具有相同开始日期的多个项目。
我需要了解一位开发人员是否分配了多个项目
给他们相同的开始日期。如果是那么我需要打印
001 Akash 2021-06-01 2
如果您查看第 3 个开发人员,他被分配到 2021 年 7 月 1 日开始的 2 个项目。但其中一个是有效的,因为它有一个结束日期
其中有一条开始日期为 2021-09-01 的相应记录。在
我需要列出我的第二份报告
{"id":"003_P003","label":"works_in","start_date":"2021-07-01","end_date":"2021-07-05"}
是重复和奇数。
我尝试了#1 的查询,但它没有显示 ID、开始日期和计数。它只显示开发者的 ID 和计数
g.V().
hasLabel('developer').
outE('works_in').
groupCount().by(outV().id()).
groupCount().by('start_date').
limit(2).
unfold().
toList()
然后我尝试了接下来的两个,但没有成功,并显示错误消息“'Column' object is not callable”(我正在使用 Python Germlin)
g.V().
hasLabel('developer').
outE('works_in').by(values(outV().id(), 'start_date')).
groupCount().
unfold().
toList()
下一个也报错
g.V().
hasLabel('developer').
outE('works_in').
groupCount().by(outV().id(), 'start_date').
unfold().
toList()
#2 我还没有开始。不过我不确定是否可以用 Gremlin 来完成。
开发人员(顶点)
[{"id":"001","label":"developer","name":"Akash","skill":"c#"},
{"id":"002","label":"developer","name":"John","skill":"react"},
{"id":"003","label":"developer","name":"Bruno","skill":"python"}]
项目(顶点)
[{"id":"P001","label":"project","name":"Web App"},{"id":"P002","label":"project","name":"Smart Contract"}, {"id":"P003","label":"project","name":"Migrate to AWS"}]
works_in(边)
[{"id":"001_P001","label":"works_in","start_date":"2021-06-01","end_date":"2021-12-31"},
{"id":"002_P002","label":"works_in","start_date":"2021-01-01","end_date":"2021-12-31"},
{"id":"001_P002","label":"works_in","start_date":"2021-06-01","end_date":"2021-06-30"},
{"id":"003_P003","label":"works_in","start_date":"2021-01-01","end_date":"2021-06-30"},
{"id":"003_P003","label":"works_in","start_date":"2021-07-01","end_date":"2021-07-05"},
{"id":"003_P002","label":"works_in","start_date":"2021-07-01","end_date":"2021-08-31"},
{"id":"003_P002","label":"works_in","start_date":"2021-09-01","end_date":"2021-12-31"}
]
感谢任何帮助。
此外,除了 Tinkerpop 的官方文档之外,我还在寻找 tutorial/course 来更好地理解 Gremlin 查询。
查询第一个用例:
gremlin> g.V().
......1> hasLabel('developer').
......2> local(
......3> __.as('b').
......4> outE().
......5> project('id', 'name', 'startDate').
......6> by(select('b').values('id')).
......7> by(select('b').values('name')).
......8> by(values('startDate')).
......9> groupCount().
.....10> unfold().as('a').
.....11> select(values).
.....12> is(gt(1)).
.....13> select('a')).
.....14> local(
.....15> union(select(keys).unfold().select(values), select(values)).fold())
==>[003,bruno,2021-07-01,2]
==>[001,akash,2021-06-01,2]
查询第二个用例
我无法为第二个用例编写任何直接的查询。
我有一个开发人员顶点和一个项目顶点以及一个具有开始日期和结束日期属性的边。 开发人员在给定时间点只能处理一个项目。有时他们会被用户错误地分配给具有相同开始日期的多个项目。
我需要了解一位开发人员是否分配了多个项目 给他们相同的开始日期。如果是那么我需要打印
001 Akash 2021-06-01 2
如果您查看第 3 个开发人员,他被分配到 2021 年 7 月 1 日开始的 2 个项目。但其中一个是有效的,因为它有一个结束日期 其中有一条开始日期为 2021-09-01 的相应记录。在 我需要列出我的第二份报告
{"id":"003_P003","label":"works_in","start_date":"2021-07-01","end_date":"2021-07-05"}
是重复和奇数。
我尝试了#1 的查询,但它没有显示 ID、开始日期和计数。它只显示开发者的 ID 和计数
g.V().
hasLabel('developer').
outE('works_in').
groupCount().by(outV().id()).
groupCount().by('start_date').
limit(2).
unfold().
toList()
然后我尝试了接下来的两个,但没有成功,并显示错误消息“'Column' object is not callable”(我正在使用 Python Germlin)
g.V().
hasLabel('developer').
outE('works_in').by(values(outV().id(), 'start_date')).
groupCount().
unfold().
toList()
下一个也报错
g.V().
hasLabel('developer').
outE('works_in').
groupCount().by(outV().id(), 'start_date').
unfold().
toList()
#2 我还没有开始。不过我不确定是否可以用 Gremlin 来完成。
开发人员(顶点)
[{"id":"001","label":"developer","name":"Akash","skill":"c#"},
{"id":"002","label":"developer","name":"John","skill":"react"},
{"id":"003","label":"developer","name":"Bruno","skill":"python"}]
项目(顶点)
[{"id":"P001","label":"project","name":"Web App"},{"id":"P002","label":"project","name":"Smart Contract"}, {"id":"P003","label":"project","name":"Migrate to AWS"}]
works_in(边)
[{"id":"001_P001","label":"works_in","start_date":"2021-06-01","end_date":"2021-12-31"},
{"id":"002_P002","label":"works_in","start_date":"2021-01-01","end_date":"2021-12-31"},
{"id":"001_P002","label":"works_in","start_date":"2021-06-01","end_date":"2021-06-30"},
{"id":"003_P003","label":"works_in","start_date":"2021-01-01","end_date":"2021-06-30"},
{"id":"003_P003","label":"works_in","start_date":"2021-07-01","end_date":"2021-07-05"},
{"id":"003_P002","label":"works_in","start_date":"2021-07-01","end_date":"2021-08-31"},
{"id":"003_P002","label":"works_in","start_date":"2021-09-01","end_date":"2021-12-31"}
]
感谢任何帮助。 此外,除了 Tinkerpop 的官方文档之外,我还在寻找 tutorial/course 来更好地理解 Gremlin 查询。
查询第一个用例:
gremlin> g.V().
......1> hasLabel('developer').
......2> local(
......3> __.as('b').
......4> outE().
......5> project('id', 'name', 'startDate').
......6> by(select('b').values('id')).
......7> by(select('b').values('name')).
......8> by(values('startDate')).
......9> groupCount().
.....10> unfold().as('a').
.....11> select(values).
.....12> is(gt(1)).
.....13> select('a')).
.....14> local(
.....15> union(select(keys).unfold().select(values), select(values)).fold())
==>[003,bruno,2021-07-01,2]
==>[001,akash,2021-06-01,2]
查询第二个用例
我无法为第二个用例编写任何直接的查询。