gremlin 的新手,我一直无法按最大值过滤顶点。
简单的图表看起来像这样:
source.addV("x").property("id", "1").property("version", 1.0)
.addV("x").property("id", "1").property("version", 1.1)
.addV("x").property("id", "2").property("version", 1.0)
我的查询是这样的:
source.V()
.has(T.label, "x")
.group()
.by("id").unfold().where(select(Column.values).unfold().values("version").max())
我正在寻找的输出是
[{type:x, id:1, version:1.1}, {type:x, id:2, version:1.0}]
我的问题是它的 throw :
org.apache.tinkerpop.gremlin.driver.exception.ResponseException: {"requestId":"x","code":"InternalFailureException","detailedMessage":"null:select([null])"}
如有任何帮助,我们将不胜感激。谢谢。
最佳答案
这里发生了几件事。
首先,您要添加没有标签的顶点,虽然允许这样做,但这种做法并不常见。您通常希望通过顶点标签将相似的项目组合在一起。您可以通过将标签名称放在 addV() 步骤中来向您的遍历添加顶点标签,如下所示:
g.addV("labelname")
其次,您将版本属性添加为字符串而不是数字,这是我假设您真正想要的,因为字符串的 max() 并没有真正意义。要更改此设置,请删除版本号周围的引号,如下所示:
g.addV().property("type", "x").property("id", "1").property("version", 1.0)
第三,考虑这个问题的方式与您预期的有点不同。与其试图找到最大版本号并将所有遍历器与其进行比较,不如考虑这个问题的方式是“找到具有最高版本的顶点,然后对于每个顶点查看它的版本号是否相等”。绕过这个有点困难,但这里有一个遍历演示了如何做到这一点:
g.V().
order().
by('version', desc).
limit(1).as('b').
V().as('a').
where('a', eq('b')).
by('version')
关于Gremlin 按最大属性过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61924465/