Concat всех массивов из разных объектов в mongoDB - PullRequest
0 голосов
/ 08 мая 2018

я начинаю обнаруживать mongodb, я хотел бы объединить images, чтобы быть в том же массиве

Пример:

{user_id:01, images:[10,20,30,40,50]}
{user_id:02, images:[11,22,33,44,55]}
{user_id:03, images:[12,22,32,42,52]}
{user_id:04, images:[13,23,33,43,53]}

Требуемый результат:

 images:[10,20,30,40,50,11,22,33,44,55,12,22,32,42,52,13,23,33,43,53]

Я нашел в Doc решение $aggreagation, вот что я попробовал:

  db.results.aggregate([{ $project: { images: { $concatArrays: ["$images"]}}}])

но он просто объединяет массив из одного и того же объекта, в моем случае, как я упоминал в result wanted, чтобы объединить весь массив с именем images из разных объектов как один

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Вы можете запустить следующий запрос агрегации, чтобы получить свой результат:

db.collection.aggregate([
{
    $unwind: "$images" // flatten the "images" array into separate documents
},
{
    $group: { // group all documents
        "_id": null, // into the same bucket
        "images": { $push: "$images"} // and push every image entry into an array called "images"
    }
},
{
    $project: {
        _id: 0 // to get rid of the "_id" field if needed
    }
}])
0 голосов
/ 08 мая 2018

Вам нужно два шага:

$ group с константным значением (например, null) в качестве группировки _id для получения массива массивов (из всех документов) и $ уменьшение для сглаживания всех массивов

db.collection.aggregate([
    {
        $group: {
            _id: null,
            images: { $push: "$images"}
        }
    },
    {
        $project: {
            _id: 0,
            images: {
                $reduce: {
                    input: "$images",
                    initialValue: [],
                    in: {
                        $concatArrays: [ "$$this", "$$value"]
                    }
                }
            }
        }
    }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...