mongodb $unwind -- Что это такое. Разворачивание вложенных массивов
Primary tabs
При агрегации данных $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/
- Log in to post comments
- 6484 reads