选择gremlin查询结果的特定数组元素
我有一个产品和订单的数据集。对于一个给定的产品(这里是产品2),我想找到与产品2一起订购最多的5种产品 我已设法查询和排序所有相关产品的频率选择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:
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)
非常感谢你。我现在明白多了。