graph-databases - Gremlin 在遍历时查询深度信息

标签 graph-databases gremlin tinkerpop tinkerpop3 janusgraph

我有一个用例,其中用户处于这样的层次结构中

用户 1 --HAS_CHILD--> 用户 2 --HAS_CHILD--> 用户 3 --HAS_CHILD--> 用户 4

对于给定的用户,我需要获取该用户拥有的所有汽车以及该用户的 child 拥有的所有汽车。对于汽车,我需要拥有用户(所有者)以及来自给定用户的该用户的深度。

前任。给定的用户是 用户 2 ,那么 user3 的深度为 1,user4 的深度为 2。

我可以使用以下查询获取汽车详细信息和所有者信息,但如何获取 childDepth ?.

g.V().has("User", "id", "user2")
 .union(
    __.out("OWNS").hasLabel("Car"),
    __.repeat(
       __.out("HAS_CHILD").hasLabel("User")
    ).emit().out("OWNS").hasLabel("Car")
 )
 .project("plateNumber", "owner", "model", "year", "childDepth")
 .by(__.values("plateNumber").fold())
 .by(__.in("OWNS").values("owner").fold())
 .by(__.values("model").fold())
 .by(__.values("year").fold())
 .by(???)

最佳答案

您可以使用 withSack :

g.withSack(0).V().has("User", "id", "user2")
 .union(
    __.out("OWNS").hasLabel("Car"),
    __.repeat(
         __.sack(sum).by(constant(1))
       .out("HAS_CHILD").hasLabel("User")
    ).emit().out("OWNS").hasLabel("Car")
 )
 .project("plateNumber", "owner", "model", "year", "childDepth")
 .by(__.values("plateNumber").fold())
 .by(__.in("OWNS").values("owner").fold())
 .by(__.values("model").fold())
 .by(__.values("year").fold())
 .by(__.sack())

关于graph-databases - Gremlin 在遍历时查询深度信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58136852/

相关文章:

java - 将数据从 eclipse 存储到 neo4j

mysql - 结合图形数据库和 RDBMS

neo4j - 如何在 neo4j 中添加双向关系属性的值集合?

graph-databases - 使用 OrientDB 递归遍历有向边

gremlin - 将 Janusgraph 与 AWSKeyspaces 结合使用。从 gremlin 控制台添加顶点时出现错误消息 `Lock write retry count exceeded`

java - 考虑Java中tinkergraph权重的最短路径

neo4j - 如何在neo4j中删除多个节点

python - Gremlin Python - "Server disconnected - please try to reconnect"错误

azure-cosmosdb - Gremlin 查询将顶点与不相关的顶点组合 CosmosDB

java - Gremlin 查询的 Union 方法的使用及其对 Neptune 交易的影响