Объединить массивы документов mon go в один - PullRequest
1 голос
/ 17 июня 2020

Для моего документа, как показано ниже, возможно ли это с помощью агрегации объединить эти два массива записей в один массив, аналогично плоской карте в java?

{ _id: 123,`
 values:[1,2,3,5]
}

{_id:234,
values:[7,98,33,1]
}

Я хочу, чтобы вывод был как

{значения: [1,2,3,5,7,98,33,1]}

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Вы можете $unwind сначала массив, чтобы получить отдельные элементы, а затем использовать $group для объединения всех элементов

db.collection.aggregate([
  {
    $unwind: "$values"
  },
  {
    $group: {
      _id: null,
      values: { $push: "$values" }
    }
  }
])
0 голосов
/ 17 июня 2020

Простой этап $group с некоторой реструктуризацией данных подойдет:

db.collection.aggregate([
    {
        $group: {
            _id: null,
            values: {$push: "$values"}
        }
    },
    {
        $project: {
            values: {
                $reduce: {
                    input: "$values",
                    initialValue: [],
                    in: {$concatArrays: ["$$value", "$$this"]}
                }
            }
        }
    }
])
...