如何对 "match" 个结果进行分组
How to group "match" results
我的问题是 "how to group the match
results" 个 select
编辑的项目?
这是我图表中的结构和数据:
结构:
- 5种顶点:
user
/ experience
/ school
/ company
/ tag
- 5种边:
studied
/ worked
/school
/ company
/ speaks
数据:
- 用户 --[工作]--> 经验 --[公司]--> 公司
- 用户 --[工作]--> 经验 --[公司]--> 公司
- 用户 --[学习]--> 经验 --[学校]--> 学校
- 用户 --[学习]--> 经验 --[学校]--> 学校
- 用户 --[speaks (level: x)]--> language
- 用户 --[speaks (level: x)]--> language
我已经用 match
、dedup
和 unfold
写了一些接近我需要的东西
g.V(16520).match(
__.as('user'),
__.as('user').out('worked').as('workExperiences'),
__.as('user').out('studied').as('schoolExperiences'),
__.as('workExperiences').out('company').as('company'),
__.as('schoolExperiences').out('school').as('school'),
__.as('user').outE('speaks').as('a').values('level').as('level').select('a').inV().values('name').as('language').select('level', 'language').as('languages')
).select('user', 'schoolExperiences', 'school', 'workExperiences', 'company', 'languages')
.unfold().dedup()
这是这个查询给我的结果:
==>user=v[16520]
==>schoolExperiences=v[4184]
==>school=v[4232]
==>workExperiences=v[12496]
==>company=v[8320]
==>languages={level=6, language=DEU}
==>languages={level=3, language=FRA}
==>schoolExperiences=v[16424]
==>school=v[4136]
==>workExperiences=v[16512]
==>company=v[4176]
我需要找到 return 这种结果的查询:
==>user=[v[16520]]
==>languages=[{level=6, language=DEU},{level=3, language=FRA}]
==>workExperiences=[v[12496], v[16512]]
==>schoolExperiences=[v[4184], v[16424]]
==>company=[v[4176], v[8320]]
==>school=[v[4136], v[4232]]
我找不到解决办法。
如有任何建议,我们将不胜感激:)
感谢阅读
F.
PS : 我是 运行 v3.0.1-incubating Tinkerpop 版本
感谢@DanielKuppitz,这是我需要的解决方案:
g.V(16520).as('user').match(
__.as('user').out('worked').as('experience').out('company').as('companyId').select('experience', 'companyId').fold().as('tmpWorkExperiences'),
__.as('user').out('studied').as('experience').out('school').as('schoolId').select('experience', 'schoolId').fold().as('tmpSchoolExperiences'),
__.as('user').outE('speaks').as('level').inV().as('language').select('level', 'language').by('level').by('name').fold().as('languages')
).select('tmpWorkExperiences').map(unfold().select('experience', 'companyId').by().by(id).fold()).as('workExperiences').
select('tmpWorkExperiences').map(unfold().select('companyId').fold()).as('company').
select('tmpSchoolExperiences').map(unfold().select('experience', 'schoolId').by().by(id).fold()).as('schoolExperiences').
select('tmpSchoolExperiences').map(unfold().select('schoolId').fold()).as('school').
select('workExperiences', 'schoolExperiences', 'company', 'school', 'languages').unfold()
结果如下:
==>workExperiences=[{experience=v[12496], companyId=8320}, {experience=v[16512], companyId=4176}]
==>schoolExperiences=[{experience=v[4184], schoolId=4232}, {experience=v[16424], schoolId=4136}]
==>company=[v[8320], v[4176]]
==>school=[v[4232], v[4136]]
==>languages=[{level=6, language=DEU}, {level=3, language=FRA}]
我的问题是 "how to group the match
results" 个 select
编辑的项目?
这是我图表中的结构和数据:
结构:
- 5种顶点:
user
/experience
/school
/company
/tag
- 5种边:
studied
/worked
/school
/company
/speaks
数据:
- 用户 --[工作]--> 经验 --[公司]--> 公司
- 用户 --[工作]--> 经验 --[公司]--> 公司
- 用户 --[学习]--> 经验 --[学校]--> 学校
- 用户 --[学习]--> 经验 --[学校]--> 学校
- 用户 --[speaks (level: x)]--> language
- 用户 --[speaks (level: x)]--> language
我已经用 match
、dedup
和 unfold
g.V(16520).match(
__.as('user'),
__.as('user').out('worked').as('workExperiences'),
__.as('user').out('studied').as('schoolExperiences'),
__.as('workExperiences').out('company').as('company'),
__.as('schoolExperiences').out('school').as('school'),
__.as('user').outE('speaks').as('a').values('level').as('level').select('a').inV().values('name').as('language').select('level', 'language').as('languages')
).select('user', 'schoolExperiences', 'school', 'workExperiences', 'company', 'languages')
.unfold().dedup()
这是这个查询给我的结果:
==>user=v[16520]
==>schoolExperiences=v[4184]
==>school=v[4232]
==>workExperiences=v[12496]
==>company=v[8320]
==>languages={level=6, language=DEU}
==>languages={level=3, language=FRA}
==>schoolExperiences=v[16424]
==>school=v[4136]
==>workExperiences=v[16512]
==>company=v[4176]
我需要找到 return 这种结果的查询:
==>user=[v[16520]]
==>languages=[{level=6, language=DEU},{level=3, language=FRA}]
==>workExperiences=[v[12496], v[16512]]
==>schoolExperiences=[v[4184], v[16424]]
==>company=[v[4176], v[8320]]
==>school=[v[4136], v[4232]]
我找不到解决办法。
如有任何建议,我们将不胜感激:)
感谢阅读
F.
PS : 我是 运行 v3.0.1-incubating Tinkerpop 版本
感谢@DanielKuppitz,这是我需要的解决方案:
g.V(16520).as('user').match(
__.as('user').out('worked').as('experience').out('company').as('companyId').select('experience', 'companyId').fold().as('tmpWorkExperiences'),
__.as('user').out('studied').as('experience').out('school').as('schoolId').select('experience', 'schoolId').fold().as('tmpSchoolExperiences'),
__.as('user').outE('speaks').as('level').inV().as('language').select('level', 'language').by('level').by('name').fold().as('languages')
).select('tmpWorkExperiences').map(unfold().select('experience', 'companyId').by().by(id).fold()).as('workExperiences').
select('tmpWorkExperiences').map(unfold().select('companyId').fold()).as('company').
select('tmpSchoolExperiences').map(unfold().select('experience', 'schoolId').by().by(id).fold()).as('schoolExperiences').
select('tmpSchoolExperiences').map(unfold().select('schoolId').fold()).as('school').
select('workExperiences', 'schoolExperiences', 'company', 'school', 'languages').unfold()
结果如下:
==>workExperiences=[{experience=v[12496], companyId=8320}, {experience=v[16512], companyId=4176}]
==>schoolExperiences=[{experience=v[4184], schoolId=4232}, {experience=v[16424], schoolId=4136}]
==>company=[v[8320], v[4176]]
==>school=[v[4232], v[4136]]
==>languages=[{level=6, language=DEU}, {level=3, language=FRA}]