Gremlin 按最大属性过滤

标签 gremlin tinkerpop

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/

相关文章:

python - Gremlin-server 通过从 gremlin-python 从 csv 文件加载数据来创建图形

TitanDB 索引没有改变状态

java - Java中使用Neo4jGraph.open()或GraphFactory.open()访问远程Neo4j数据库

gremlin - 获取tinkerpop中保存的中间节点的路径

Orientdb 无法从 Java 打开数据库

java - 小叮当/小魔怪 : select vertices together with outgoing edge count

graph - Tinkerpop - 使用 Redis 进行键值属性索引更好还是使用 KeyIndexableGraph

azure - 如何使用 Gremlin API 在 Azure Cosmos DB 中创建元图

scala - Gremlin 与海王星 : Timed out while waiting for an available host

gremlin - 使用 Gremlin 将属性和元属性提取为类似 JSON 的结构