Как извлечь фрагмент массива с учетом позиции элемента в MongoDB? - PullRequest
0 голосов
/ 13 марта 2020

Я пытаюсь извлечь фрагмент массива в MongoDB, учитывая положение определенного элемента (action4 в примере). Пример данных:

[{name: 'John Doe', actions: ['action1', 'action2', 'action3', 'action4']},
{name: 'Margie Addams', actions: ['action1', 'action2', 'action4', 'action3']},
{name: 'Fer Doughnut', actions: ['action1', 'action4', 'action3', 'action2']},
{name: 'Anthony Peralta', actions: ['action1', 'action2', 'action3', 'action4']},
{name: 'Pete Parker', actions: ['action1', 'action2', 'action3', 'action4']},
{name: 'Josh Dean', actions: ['action4', 'action2', 'action3', 'action1']}]

Мне удалось найти позицию action4 внутри массива с помощью запроса агрегации, например

{$indexOfArray: ["$actions", "action4"]}

, но я не могу найти способ извлечь из начало массива в его позиции. Любое предложение?

1 Ответ

1 голос
/ 13 марта 2020

Вы можете использовать $ slice и $ indexOfArray операторы агрегирования, например:

db.collection.aggregate([
  {
    $addFields: {
      actions: {
        $slice: [
          "$actions",
          {
            $indexOfArray: [
              "$actions",
              "action4"
            ]
          }
        ]
      }
    }
  }
])

Playground

...