我在两个不同的逻辑分区中有两个顶点(两者都有不同的分区键值)。我在他们之间创建了一条边缘。现在,当我在源顶点上运行 outE() 时,它返回 null,而当我在目标顶点上运行 inE() 时,它会返回以 outV 作为源顶点的边。
这些是 gremlin 查询相同的内容,
g.addV(‘vertex_label_1’).property(‘id’,’V1’).property(‘pk’,’pkX’)
g.addV(‘vertex_label_2’).property(‘id’,’V2’).property(‘pk’,’pkY’)
添加边缘:
g.V(‘V1’).has(‘pk’,’pkX’).addE(‘edge_label_12’).property(‘id’,’E12’).to(g.V(‘V2’).has(‘pk’,’pkY’))
现在当我运行 g.V('V1').outE() -> 它返回 null 当我运行 g.V('V2').inE() -> 它返回上面的边缘
我不确定我在这里错过了什么?
我在源顶点上运行 outE() ,它返回 null,而当我在目标顶点上运行 inE() 时,它返回以 outV 作为源顶点的边。
正如@NotFound建议设置
bidirectional
边缘。因此,我们可以使用 OutE() 查询任意一侧。我使用这种方法在使用任一查询进行查询时获得相同的Edge。
以下是我遵循的步骤,返回相同的Edge'E12':
添加顶点V1:
g.addV('vertex_label_1').property('id', 'V1').property('pk', 'pkX')
创建一个带有标签 vertex_label_1、id V1 和 partition key
pkX 的顶点。[
{
"id": "V1",
"label": "vertex_label_1",
"type": "vertex",
"properties": {
"pk": [
{
"id": "V1|pk",
"value": "pkX"
}
]
}
}
]
添加顶点V2:
g.addV('vertex_label_2').property('id', 'V2').property('pk', 'pkY')
创建一个带有标签 vertex_label_2、id V2 和 partition key
pkY 的顶点。[
{
"id": "V2",
"label": "vertex_label_2",
"type": "vertex",
"properties": {
"pk": [
{
"id": "V2|pk",
"value": "pkY"
}
]
}
}
]
在 V1 和 V2 之间创建双向关系:
g.V('V1').has('pk', 'pkX').as('v1')
选择顶点 V1 上值为 pkX 的属性 pk,并为其指定别名 v1。
.V('V2').has('pk', 'pkY').as('v2')
选择顶点 V2 上值为 pkY 的属性 pk,并为其指定别名 v2。
.addE('edge_label_12').property('id', 'E12').from('v1').to('v2')
它生成一条带有标签 edge_label_12 和 ID E12 的新边。从称为 v1 的顶点开始后,它链接到称为 v2 的顶点。
这建立了边缘的第一个方向,从V1到V2。
.addE('edge_label_12').property('id', 'E12').from('v2').to('v1')
相同的 ID E12 用于构造第二条带有标签 edge_label_12 的新边。从 v2 开始后,它链接到顶点 v1。
这确定了边的第二个方向,从 V2 到 V1。
查询:
g.V('V1').has('pk', 'pkX').as('v1')
.V('V2').has('pk', 'pkY').as('v2')
.addE('edge_label_12').property('id', 'E12').from('v1').to('v2')
.addE('edge_label_12').property('id', 'E12').from('v2').to('v1')
[
{
"id": "E12",
"label": "edge_label_12",
"type": "edge",
"inVLabel": "vertex_label_1",
"outVLabel": "vertex_label_2",
"inV": "V1",
"outV": "V2"
}
]
g.V('V1').outE()
V1 顶点出边由查询返回。连接 V1 和 V2 的边 E12 由如下所示的输出准确返回:[
{
"id": "E12",
"label": "edge_label_12",
"type": "edge",
"inVLabel": "vertex_label_2",
"outVLabel": "vertex_label_1",
"inV": "V2",
"outV": "V1"
}
]
g.V('V2').inE()
将传入边返回到顶点 V2。该报告准确地识别了连接 V1 和 V2 的边 E12。[
{
"id": "E12",
"label": "edge_label_12",
"type": "edge",
"inVLabel": "vertex_label_2",
"outVLabel": "vertex_label_1",
"inV": "V2",
"outV": "V1"
}
]
g.V('V2').outE()
检索顶点 V2 的所有传出边。[
{
"id": "E12",
"label": "edge_label_12",
"type": "edge",
"inVLabel": "vertex_label_1",
"outVLabel": "vertex_label_2",
"inV": "V1",
"outV": "V2"
}
]
g.V('V1').outE()
、g.V('V2').inE()
和g.V('V2').outE()
返回相同的边E12,表明V1和V2存储在同一个分区中,无论它们的分区键值不同。