【问题标题】:How to return all steps of traversal even if Gremlin query can not complete?即使 Gremlin 查询无法完成,如何返回遍历的所有步骤?
【发布时间】:2021-07-24 01:02:55
【问题描述】:

我的问题如下:

我有一个图,其中包含标记为“用户”的顶点和它们之间对应于他们的家庭关系的边。两种类型的顶点是父用户和子用户。它们之间的边缘标签是“childOf”和“parentOf”。一个父母可以有多个孩子,但为简单起见,一个孩子只能有一个父母。我想创建一个 Gremlin 查询来获取特定父级的所有子级。我正在使用 CosmosDB 和 Node.js,所以查询如下所示:

(`g.V().has('userId', userId).has('isParent', isParent).outE('parentOf').inV().path()`, {
   userId: userId,
   isParent: true
})

这确实有效,并且可以获取所有子用户。当父用户确实存在并且它有一个或多个孩子时,我可以解析结果,并在场景中获得我想要的一切。

但是当父母没有孩子,或者父母根本不存在的情况下呢?这就是我在查询结束时开始使用“path()”标志的原因。如果有父级,并且确实有一个子级,则此查询将遍历三个步骤。第一个到父顶点,第二个到它们之间的边,第三个到子顶点。

我的想法是,当我只有父母,但他们没有孩子时,这个查询将只返回一个步骤,即到达第一个顶点,即父母,然后不去任何其他步骤,因为不存在边和子顶点。这样我就可以解析结果,如果只有一个步骤,我可以使用该信息返回一条消息,表明父级确实存在,但没有任何子级。如果父节点甚至不存在,它将以零步返回,因为甚至没有一个顶点开始,我也可以使用该信息。

但真正发生的情况是,如果查询不能完全完成,所以没有外边(并且应该在它的末尾没有顶点)它不会返回发生的步骤,它只是返回以下:

{
   "_items": [],
   "attributes": {
      "x-ms-status-code": 200,
      "x-ms-request-charge": 8.24,
      "x-ms-total-request-charge": 8.24,
      "x-ms-server-time-ms": 7.7629,
      "x-ms-total-server-time-ms": 7.7629,
      "x-ms-activity-id": "26c2ca5f-8479-4bab-b4f4-7fe6969d5e51"
   },
   "length": 0
}

即使整个查询不完整,如何修改查询以返回所有步骤?是否存在任何替代解决方案?

【问题讨论】:

    标签: javascript node.js azure-cosmosdb gremlin tinkerpop


    【解决方案1】:

    使用此示例数据:

    g.addV('person').property('userId','x').as('x').
      addV('person').property('userId','y').as('y').
      addV('person').property('userId','z').as('z').
      addE('parentOf').from('x').to('y').iterate()
    

    你没有说你想要你的数据是什么形式,所以也许这对你有用:

    gremlin> g.V().has('person','userId', 'x').
    ......1>   project('parent','children').
    ......2>     by('userId').
    ......3>     by(out('parentOf').values('userId').fold())
    ==>[parent:x,children:[y]]
    gremlin> g.V().has('person','userId', 'y').
    ......1>   project('parent','children').
    ......2>     by('userId').
    ......3>     by(out('parentOf').values('userId').fold())
    ==>[parent:y,children:[]]
    

    【讨论】:

      猜你喜欢
      • 2021-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多