outE() 不显示边缘,但 inE() 显示 Gremlin 的 Cosmos DB 中的边缘

问题描述 投票:0回答:1

我在两个不同的逻辑分区中有两个顶点(两者都有不同的分区键值)。我在他们之间创建了一条边缘。现在,当我在源顶点上运行 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() -> 它返回上面的边缘

我不确定我在这里错过了什么?

参考:https://learn.microsoft.com/en-us/answers/questions/1286272/how-to-add-an-edge- Between-2-vertices-in- Different

azure-cosmosdb gremlin azure-cosmosdb-gremlinapi
1个回答
0
投票

我在源顶点上运行 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"
        }
      ]
    }
  }
]

V1V2 之间创建双向关系:

  • 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 的顶点。

  • 这建立了边缘的第一个方向,从V1V2

  • .addE('edge_label_12').property('id', 'E12').from('v2').to('v1')
    相同的 ID E12 用于构造第二条带有标签 edge_label_12 的新边。从 v2 开始后,它链接到顶点 v1

  • 这确定了边的第二个方向,从 V2V1

查询:

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 顶点出边由查询返回。连接 V1V2 的边 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。该报告准确地识别了连接 V1V2 的边 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,表明V1V2存储在同一个分区中,无论它们的分区键值不同。
© www.soinside.com 2019 - 2024. All rights reserved.