【发布时间】:2018-12-25 13:33:34
【问题描述】:
将我视为“用户” 1. 查询的目的是获取我关注的人“发布”的帖子,并检查每个帖子:
- 我是否喜欢过它
- 我关注的其他人是否喜欢它,如果是,随机选择其中一位用户返回
样本数据:
g.addV('user').property('id',1).as('1')
addV('user').property('id',2).as('2').
addV('user').property('id',3).as('3').
addV('user').property('id',4).as('4').
addV('post').property('postId','post1').as('p1').
addV('post').property('postId','post2').as('p2').
addE('follow').from('1').to('2').
addE('follow').from('1').to('3').
addE('follow').from('1').to('4').
addE('posted').from('2').to('p1').
addE('posted').from('2').to('p2').
addE('liked').from('1').to('p2').
addE('liked').from('3').to('p2').
addE('liked').from('4').to('p2').iterate()
查询:(在这里回答:Graph/Gremlin for social media use case)
g.V().has('id',1).as('me').out('follow').aggregate('followers').out('posted').group().by('postId').by(project('likedBySelf','likedByFollowing').by(__.in('liked').where(eq('me')).count()).by(__.in('liked').where(within('followers')).order().by(shuffle).values('id').fold()))
输出:
[post1:[likedBySelf:0,likedByFollowing:[]],post2:[likedBySelf:1,likedByFollowing:[4,3]]]
这个查询能够打乱值,但显示所有的 'id',现在我只想选择第一个 'id'。使用 .next() 而不是 .fold() 会导致异常 java.util.NoSuchElementException 是否可以随机选择而不必先评估所有遍历然后打乱它们?
期望的输出:
[post1:[likedBySelf:0,likedByFollowing:[]],post2:[likedBySelf:1,likedByFollowing:[3]]]
或者
[post1:[likedBySelf:0,likedByFollowing:[]],post2:[likedBySelf:1,likedByFollowing:[4]]]
【问题讨论】: