选择gremlin查询结果的特定数组元素

选择gremlin查询结果的特定数组元素,gremlin,azure-cosmosdb-gremlinapi,Gremlin,Azure Cosmosdb Gremlinapi,我有一个产品和订单的数据集。对于一个给定的产品(这里是产品2),我想找到与产品2一起订购最多的5种产品 我已设法查询和排序所有相关产品的频率 g.V().has('PRODUCT', 'id', '2').as('a').in('purchased').out('purchased').where(neq('a')).groupCount().order(local).by(values, Order.decr) 返回 ==>[4:3,6:2,7:2,12:2,13:2,14:2,15:

我有一个产品和订单的数据集。对于一个给定的产品(这里是产品2),我想找到与产品2一起订购最多的5种产品

我已设法查询和排序所有相关产品的频率

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

==>[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给了我一个包含所有结果的数组,所以我不能使用限制步长或范围步长。如何仅选择数组的前五个条目?

注意
groupCount()
返回的是
Map
而不是“数组”。另外,请注意,您已经在使用该机制执行您想要执行的操作-
Scope.local
limit()
range()
都可以占用
范围,因此您可以执行以下操作:

 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)

非常感谢你。我现在明白多了。