【发布时间】: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