Заказ Гремлин на карте Результаты - PullRequest
1 голос
/ 23 февраля 2020

У меня есть следующий запрос:

g.V('1')
    .union(
        out('R1')
            .project('timestamp', 'data')
                .by('completionDate')
                .by(valueMap().by(unfold()))
        out('R2')
            .project('timestamp', 'data')
                .by('endDate')
                .by(valueMap().by(unfold()))
        )

Как мне упорядочить результаты UNION по отметке времени? Я пытался использовать ".order (). By ('timestamp')", но это работает только на обходах, и UNION возвращает объект MAP.

1 Ответ

3 голосов
/ 23 февраля 2020

Вот несколько способов приблизиться к нему. Во-первых, вы можете просто использовать свой код как есть, а затем order() по метке времени:

g.V('1').
  union(out('R1').
          project('timestamp', 'data').
            by('completionDate').
            by(valueMap().by(unfold())),
        out('R2').
          project('timestamp', 'data').
            by('endDate').
            by(valueMap().by(unfold()))).
  order().by(select('timestamp'))

Обратите внимание, что select() - это ключ от Map, который вы хотите использовать. сортировать по. Версии после 3.4.5 будут работать на больше, чем вы ожидаете , и вы можете просто сделать by('timestamp') для Map, а также Element.

Я думаю, что более читабельный однако подход будет go с таким подходом:

g.V('1').
  out('R1','R2').
  project('timestamp', 'data').
    by(coalesce(values('endDate'), values('completionDate'))).
    by(valueMap().by(unfold())).
  order().by(select('timestamp'))

Возможно, вам потребуется улучшить by(coalesce(...)) в зависимости от характера вашей схемы, но, надеюсь, вы поймете, что я пытаюсь делать там.

...