Javascript 即使Gremlin查询无法完成,如何返回遍历的所有步骤?

Javascript 即使Gremlin查询无法完成,如何返回遍历的所有步骤?,javascript,node.js,azure-cosmosdb,gremlin,tinkerpop,Javascript,Node.js,Azure Cosmosdb,Gremlin,Tinkerpop,我的问题如下: { "_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,

我的问题如下:

{
   "_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
}
我有一个包含标记为“用户”的顶点和它们之间的边的图,这些边对应于它们的族关系。这两种类型的顶点是父用户和子用户。它们之间的边标签是“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
}

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

使用此示例数据:

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:[]]