mongodb $unwind -- Что это такое. Разворачивание вложенных массивов

При агрегации данных $unwind позволяем развернуть поля-подмассивы путём дублирования в выборке родительской сущности для каждого поля такого подмассива.

Пример

Пускай у нас есть следующая база людей:

db.test.insert({name: "Ivan", likes: ["Maria", "Anna"]});
db.test.insert({name: "Serge", likes: ["Anna"]});

Пусть поле likes означает какие девочки нравятся какому мальчику. Применим оператор $unwind:

db.test.aggregate({$unwind: "$likes"});


{
        "result" : [
                {
                        "_id" : ObjectId("4f598de76a8f8bc74573e9fd"),
                        "name" : "Ivan",
                        "likes" : "Maria"
                },
                {
                        "_id" : ObjectId("4f598de76a8f8bc74573e9fd"),
                        "name" : "Ivan",
                        "likes" : "Anna"
                },
                {
                        "_id" : ObjectId("4f598e086a8f8bc74573e9fe"),
                        "name" : "Serge",
                        "likes" : "Anna"
                }
        ],
        "ok" : 1
}

-- видим что массив likes развернулся и каждый документ теперь имеет поле likes с каждым значением массива, которые он имел до этого. Если мы хотим найти самую популярную девочку достаточно сгруппировать выборку по полю likes. Для группировки служит следующий оператор.

Если речь идёт о массиве объектов

Если речь идёт о массиве объектов, то для каждой развернутой строки под именем подмассива будет находится один вложенный объект.

Источник:
https://habrahabr.ru/post/139643/

Key Words for FKN + antitotal forum (CS VSU):