$ concatArrays с $ map игнорирует $ concatArrays - PullRequest
0 голосов
/ 27 июня 2019

У меня проблемы с пониманием того, почему следующее приводит к нелогичным результатам.
Мы знаем, что $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",
                },
            },
        },
    }},
]);

1 Ответ

1 голос
/ 27 июня 2019

Это невозможно в MongoDB (по крайней мере, начиная с версии 4.0). Из-за дизайна языка выражения.

Чек https://jira.mongodb.org/browse/SERVER-31786.

Дэвид Сторч говорит:

Для любого такого n-арного выражения, которое я назову $ nary, синтаксис {$ nary: "$ myArg"} - это просто сокращение для {$ nary: ["$ myArg"]}. Эти два выражения идентичны по смыслу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...