【发布时间】:2020-07-20 02:49:46
【问题描述】:
是否可以在 gremlin 中对 choose() 中的内容进行计数,然后返回到遍历中的上一步?:
g.V()
.hasLabel("user1")
.as("firstStep")
.V()
.as("secondStep")
.fold()
.choose(
count(local).is(gt(1)),
select('firstStep'),
select('secondStep')
)
执行了 select('firstStep') 行,但没有返回任何内容,因为此时 .as("firstStep") 存储的所有内容都被 fold() 删除了
当然我总是可以以牺牲性能为代价解决这种问题,搜索2次重复成本:
g.V()
.hasLabel("user1")
.choose(
V().fold().count(local).is(lt(2)),
V().fold()
)
我正在寻找比这更好的解决方案。
这就像我去商店付钱一样,因为我必须计算零钱,我忘记了如何回到我的软管,电影中的小精灵比这更聪明。我希望有一个我忽略的解决方案。
编辑: 有一个答案建议将 as() 替换为 store() 但这不是一个通用的解决方案,在大多数情况下都不起作用,因为这些工具非常不同,例如这个查询有同样的问题并将 as() 替换为store() 给出了不同的结果:
g.V()
.hasLabel('user')
.project("user")
.by(
as("singleUser")
.V()
.fold()
.choose(
count(local).is(gt(1)),
select('singleUser'),
unfold()
)
)
【问题讨论】:
标签: gremlin tinkerpop tinkerpop3 gremlin-server