Группа ArangoDB и сортировка - PullRequest
0 голосов
/ 10 марта 2020

В ArangoDB я хочу сгруппировать и отсортировать данные уведомлений.

У меня есть следующие наборы данных уведомлений

[
  {id: 1, groupId: 1, text: 'Aoo', time: 23},
  {id: 2, groupId: 2, text: 'Boo', time: 32},
  {id: 3, groupId: 1, text: 'Coo', time: 45},
  {id: 4, groupId: 3, text: 'Doo', time: 56},
  {id: 5, groupId: 1, text: 'Eoo', time: 22},
  {id: 6, groupId: 2, text: 'Foo', time: 23}
]

Я хочу сгруппировать уведомление по groupId, и недавняя группа уведомлений должна появляются сверху. Окончательный результат должен выглядеть следующим образом:

[
  { groupId: 3, notifications: [{id: 4, groupId: 3, text: 'Doo', time: 56}],
  { groupId: 1, notification: [{id: 3, groupId: 1, text: 'Coo', time: 45}, {id: 1, groupId: 1, text: 'Aoo', time: 23}, {id: 5, groupId: 1, text: 'Eoo', time: 22}]},
  { groupId: 2, notifications: [{id: 2, groupId: 2, text: 'Boo', time: 32}, {id: 6, groupId: 2, text: 'Foo', time: 23}] }
]

Пробовал по AQL

FOR doc IN notificaion
SORT doc.time DESC
COLLECT groupId = doc.groupId INTO g
RETURN { groupId, notifications: g[*].doc }

Вышеупомянутый запрос сортирует элементы внутренней группы, но внешние группы не сортируются.

I ' Я пытаюсь построить AQL для него. Любой указатель будет полезен.

Спасибо

1 Ответ

0 голосов
/ 11 марта 2020

Сортировка дважды: как только набор документов собран - как вы уже делаете, затем сбор:

FOR doc IN notification
  SORT doc.time DESC
  COLLECT groupId = doc.groupId INTO g
  SORT g[*].doc.time DESC
  RETURN { groupId, notifications: g[*].doc }

В моих тестах это дает желаемую последовательность:

[
  {
    "groupId": 3,
    "notifications": [
      {
        "id": 4,
        "groupId": 3,
        "text": "Doo",
        "time": 56
      }
    ]
  },
  {
    "groupId": 1,
    "notifications": [
      {
        "id": 3,
        "groupId": 1,
        "text": "Coo",
        "time": 45
      },
      {
        "id": 1,
        "groupId": 1,
        "text": "Aoo",
        "time": 23
      },
      {
        "id": 5,
        "groupId": 1,
        "text": "Eoo",
        "time": 22
      }
    ]
  },
  {
    "groupId": 2,
    "notifications": [
      {
        "id": 2,
        "groupId": 2,
        "text": "Boo",
        "time": 32
      },
      {
        "id": 6,
        "groupId": 2,
        "text": "Foo",
        "time": 23
      }
    ]
  }
]
...