Запрос присоединения в gremlin, группировка результатов в отношении один ко многим - PullRequest
0 голосов
/ 07 ноября 2019

Мне нужно набрать вершины Страна и Аэропорты, и каждая страна имеет преимущество перед несколькими аэропортами с меткой "hasAirport"

Я пытаюсь выполнить запрос на объединение, который вернет Страны, сгруппированные с имеющимися у них аэропортами. .

g.V().hasLabel("Country").as("country").out('hasAirport').as("airport").select("country", "airport").by(__.unfold().valueMap(true).fold()).toList()

Если у меня только одна страна, скажем, США с двумя аэропортами на моем графике, результат запроса будет примерно таким, как показано ниже.

[   {
    "country": [
      {
        "name": "United States",
        "code": "USA",      "label": "Country",
        "id": 1565,
      }
    ],
    "airport": [
      {
        "id": 1234,
        "label": "Airport",
        "name": "San Francisco International Airport",      "code": "SFO"
      }
    ]   },   {
    "country": [
      {
        "name": "United States",
        "code": "USA",      "label": "Country",
        "id": 1565,
      }
    ],
    "airport": [
      {
        "id": 2345,
        "label": "Airport",
        "name": "Austin Bergstrom International Airport",       "code": "AUS"
      }
    ]   }  ]

Есть ли способобъединить несколько аэропортов в один массив, как показано ниже

[
  {
    "country": [
      {
        "name": "United States",
        "code": "USA",
        "label": "Country",
        "id": 1565,
      }
    ],
    "airport": [
      {
        "id": 1234,
        "label": "Airport",
        "name": "San Francisco International Airport",
        "code": "SFO"
      },
      {
        "id": 2345,
        "label": "Airport",
        "name": "Austin Bergstrom International Airport",
        "code": "AUS"
      }
    ]
  }
 ]

1 Ответ

1 голос
/ 07 ноября 2019

Вам нужно использовать project:

g.V().hasLabel("Country")
.project("country","airport")
.by(valueMap(true))
.by(out('hasAirport').valueMap(true).fold())
...