Края commented
должны иметь свойство timestamp, поэтому в следующем запросе все еще есть задание, но я предполагаю, что будет легко вычислить оставшуюся часть самостоятельно.
g.V().has('user','id',1).as('me').
out('follow').as('friend').
out('posted').as('post'). /* all the posts 'posted' by the people I follow */
project('friend','post','liked','likes','comments','latest').
by(select('friend')).
by(select('post').by('postId')).
by(coalesce(__.in('liked').where(eq('me')).constant('yes'),
constant('no'))). /* whether I have liked it or not */
by(inE('liked').count()). /* no of likes */
by(inE('comments').count()). /* comments that post have(only count) */
by(__.in('comments').as('comment'). /* todo: order by time desc */
in('commented').as('user').limit(3). /* latest 3 comments */
select('comment','user').
by(valueMap()). /* with all properties */
fold())
Результат для примера графика:
==>[friend:v[2],post:post1,liked:no,likes:0,comments:1,latest:[[comment:[id:[c1],text:[hi]],user:[id:[1]]]]]
==>[friend:v[2],post:post2,liked:yes,likes:3,comments:1,latest:[[comment:[id:[c2],text:[nice]],user:[id:[2]]]]]