【问题标题】:Create a "join" query with data from edge and connected vertix使用来自边缘和连接顶点的数据创建“连接”查询
【发布时间】:2019-04-12 10:57:24
【问题描述】:

我有一个 Gremlin API Cosmos DB。在数据库中,我有一种带有标签User 的顶点,它们连接到标签为Companies 的顶点。然后我想展示所有关联的公司。我查询g.V('id-of-User').outE() 并获得所有连接的公司。结果可能如下所示:

[
  {
    "id": "08f97a1d-9e81-4ccc-a498-90eb502b1879",
    "label": "AuthorizedSignatory",
    "type": "edge",
    "inVLabel": "Company",
    "outVLabel": "User",
    "inV": "abd51134-1524-44fe-8a49-60d2d449a1f3",
    "outV": "103bf1b9-464f-4f68-a4ca-7dfdbe94ae84"
  },
  {
    "id": "c36b640b-9574-403b-8ab6-fcce695caa90",
    "label": "AuthorizedSignatory",
    "type": "edge",
    "inVLabel": "Company",
    "outVLabel": "User",
    "inV": "2c14d279-00a4-41ad-a8c0-f3b882864568",
    "outV": "103bf1b9-464f-4f68-a4ca-7dfdbe94ae84"
  }
]

这完全符合预期。现在我想更进一步,不仅在 inV 参数中显示 GUID,我还想在结果对象中包含公司名称,但我不明白如何在此处执行与 SQL 连接等效的操作。

谁能帮帮我!!

我想要的是类似于下面的例子:

[
  {
    "id": "08f97a1d-9e81-4ccc-a498-90eb502b1879",
    "label": "AuthorizedSignatory",
    "type": "edge",
    "inVLabel": "Company",
    "outVLabel": "User",
    "inV": "abd51134-1524-44fe-8a49-60d2d449a1f3",
    "outV": "103bf1b9-464f-4f68-a4ca-7dfdbe94ae84",
    "CompanyName": "ACME CORP"
  },
  {
    "id": "c36b640b-9574-403b-8ab6-fcce695caa90",
    "label": "AuthorizedSignatory",
    "type": "edge",
    "inVLabel": "Company",
    "outVLabel": "User",
    "inV": "2c14d279-00a4-41ad-a8c0-f3b882864568",
    "outV": "103bf1b9-464f-4f68-a4ca-7dfdbe94ae84",
    "CompanyName": "Giganticorp"
  }
]

CompanyName 是 Company Vertice 中的属性之一,guid 位于 inV 属性中。

【问题讨论】:

    标签: gremlin azure-cosmosdb-gremlinapi


    【解决方案1】:

    没有“加入”。数据已通过边缘连接,因此您只需沿着图表进一步遍历即可获得“CompanyName”。

    g.V('id-of-User').out().values("CompanyName")
    

    这会显示与该用户相关的所有公司名称。如果您说除了示例中的公司名称之外,您仍想显示来自边缘的数据,那么没问题,project() 边缘具体说明了您想要的内容:

    g.V('id-of-User').outE().
      project('eid','label','companyName').
        by(T.id).
        by(T.label).
        by(inV().values("CompanyName"))
    

    再次注意,“CompanyName”没有“join”。由于数据是通过边缘隐式连接的,因此您只需遍历 inV() 即可到达那里的数据。

    【讨论】:

    • 谢谢。这正是我想要的。 :D 我知道没有“连接”,因此我说等同于清楚我想要什么。非常感谢斯蒂芬...
    • 好吧——我只强调“join”,因为我们遇到很多问题,人们试图在没有边的情况下进行类似 SQL 的连接,比如通过属性值匹配两个未连接的顶点。在大多数情况下,这不适用于图形查询,除非您严格限制了要以这种方式匹配的顶点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    相关资源
    最近更新 更多