У меня проблемы с пониманием того, почему следующее приводит к нелогичным результатам.
Мы знаем, что $concatArrays
принимает массив массивов и возвращает содержимое каждого в одном массиве.
Мы знаем, что $map
принимает массив и преобразовывает элементы во что-то еще, что приводит к новому массиву, модифицированному для одной функции.
Моя проблема возникает при объединении $concatArrays
из $map
. Возьмем для примера:
db.product.aggregate([
{$replaceRoot:
{newRoot: {
"_id": "$_id",
"availablesizes":
{$concatArrays: {$map: {
"input": [[1],[2],[3]],
"in": "$$this",
}},
},
},
}},
]);
Ради тестирования я заменил массив переменных «input» статическим массивом аналогичной структуры.
Логическая оценка ... $map
Этап возвращает буквально [[1],[2],[3]]
, поскольку каждый элемент возвращается как есть. Тогда $concatArrays
должен вернуть [1, 2, 3]
, поскольку это выравнивает массив.
НО фактический результат [[1],[2],[3]]
!!
Если я удалю $concatArrays
, результат останется прежним :
db.product.aggregate([
{$replaceRoot:
{newRoot: {
"_id": "$_id",
"availablesizes":
{$map: {
"input": [[1],[2],[3]],
"in": "$$this",
},
},
},
}},
]);