Select gremlin查询结果的具体数组元素

Select specific array elements of gremlin query result

我有一个包含产品和订单的数据集。对于给定的产品(此处为 PRODUCT 2),我想找到与 PRODUCT 2 组合订购最多的 5 种产品。

我已设法查询所有相关产品并按其频率对其进行排序。

g.V().has('PRODUCT', 'id', '2').as('a').in('purchased').out('purchased').where(neq('a')).groupCount().order(local).by(values, Order.decr)

returns

==>[4:3,6:2,7:2,12:2,13:2,14:2,15:2,1:1,3:1,5:1,8:1,9:1,10:1,11:1,16:1,17:1]

gremlin 给了我一个包含所有结果的数组,所以我不能使用限制步骤或范围步骤。我怎么能 select 只有数组的前五个条目?

请注意 groupCount() returns 是 Map 而不是 "array"。另外,请注意,您已经在使用该机制来做您想做的事 - Scope.locallimit()range() 都可以使用 Scope 所以你可以这样做:

 g.V().has('PRODUCT', 'id', '2').as('a').
   in('purchased').out('purchased').
   where(neq('a')).
   groupCount().
   order(local).by(values, Order.decr).
   limit(local,5)

值得记住的是 Map 只是一个集合,因此可以用 unfold() 解构为它的项目,在这种情况下:

 g.V().has('PRODUCT', 'id', '2').as('a').
   in('purchased').out('purchased').
   where(neq('a')).
   groupCount().
   order(local).by(values, Order.decr).
   unfold()
   limit(5)