Добавить количество исходящих ребер в elementMap вершины

используя набор данных аэропорта, я хочу вернуть полный elementMap каждого аэропорта - плюс количество входящих ребер "маршрута".

То, что у меня сейчас выглядит так (Ссылка на пример: https://gremlify.com/z05d54wyt99)

      g.V().hasLabel('airport').
    project('airport', 'count').
        by(elementMap()).
        by(inE('route').count())

Однако это возвращает объект и счет отдельно:

      {
  "airport": {
    "id": 5763,
    "label": "airport",
    "code": "AUS"
  },
  "count": 1
}

Вместо этого то, что я ищу, выглядит так:

      {
  "id": 5763,
  "label": "airport",
  "code": "AUS",
  "count": 1
}

Я знаю, что могу использовать project указать каждое свойство индивидуально, но есть ли лучший способ сделать это?

Заранее спасибо!

1 ответ

Решение

Вот один из способов сделать это. Здесь используется общий паттерн Гремлин для объединения двух карт в одну. Есть и другие способы сделать это. Я использовал limit(2)просто чтобы получить два результата для примера. В некотором смысле я предпочитаю исходный запрос, поскольку он очень прост и вы можете легко извлечь результаты в приложении.

      gremlin> g.V().hasLabel('airport').
......1>       limit(2).
......2>       project('results').
......3>         by(union(elementMap(),project('count').by(inE('route').count())).fold()).
......4>       local(
......5>         select('results').unfold().unfold().
......6>         group().
......7>           by(keys).
......8>           by(select(values)))  
 
==>[country:US,code:ATL,longest:12390,city:Atlanta,count:242,lon:-84.4281005859375,type:airport,label:airport,elev:1026,id:1,icao:K
ATL,region:US-GA,runways:5,lat:33.6366996765137,desc:Hartsfield - Jackson Atlanta International Airport]
==>[country:US,code:ANC,longest:12400,city:Anchorage,count:40,lon:-149.996002197266,type:airport,label:airport,elev:151,id:2,icao:P
ANC,region:US-AK,runways:3,lat:61.1744003295898,desc:Anchorage Ted Stevens]  
Другие вопросы по тегам