地图结果上的Gremlin顺序



我有以下查询:

g.V('1')
.union(
out('R1')
.project('timestamp', 'data')
.by('completionDate')
.by(valueMap().by(unfold()))
out('R2')
.project('timestamp', 'data')
.by('endDate')
.by(valueMap().by(unfold()))
)

如何按时间戳对UNION结果进行排序?我尝试过使用".order((.by('timestamp'(",但这只适用于遍历和UNION返回MAP对象。

以下是几种方法。首先,您可以按原样使用代码,然后按"时间戳"使用order()

g.V('1').
union(out('R1').
project('timestamp', 'data').
by('completionDate').
by(valueMap().by(unfold())),
out('R2').
project('timestamp', 'data').
by('endDate').
by(valueMap().by(unfold()))).
order().by(select('timestamp'))

请注意,不同之处在于select()是您想要排序的Map中的键。3.4.5之后的版本将更符合您的预期,您可以简单地为MapElement执行by('timestamp')

然而,我认为更可读的方法是采用这种方法:

g.V('1').
out('R1','R2').
project('timestamp', 'data').
by(coalesce(values('endDate'), values('completionDate'))).
by(valueMap().by(unfold())).
order().by(select('timestamp'))

根据模式的性质,您可能需要增强by(coalesce(...)),但希望您了解我在那里要做什么。

最新更新