Создайте запрос «соединения» с данными из ребра и связанного вертикали - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть 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"
  }
]

Это абсолютно как ожидалось.Теперь я хочу пойти немного дальше, и вместо того, чтобы просто показывать GUID в параметре inV, я также хочу включить Название компании в объект результата, но я не понимаю, как сделать эквивалент соединения 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 является одним из свойств вКомпания Vertice с гидом в inV проп.

1 Ответ

0 голосов
/ 12 апреля 2019

Нет "присоединиться". Данные уже связаны через край, поэтому вам просто нужно пройти дальше по графику, чтобы получить «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(), чтобы добраться до данных там.

...