Как создать пользовательский объект в качестве вывода с именем поля в качестве ключа в MongoDB?

1

Изменение выходных данных запроса агрегации, где ключом является имя поля из базы данных.

Я пробовал следующее: Как использовать значение поля в качестве имени ключа в результате Mongodb

Но это приводит к следующей ошибке:

MongoError: $ arrayToObject требует объектных ключей 'k' и 'v'. Найдено неверное количество ключей: 1

var data = await Message.aggregate([
    {
      $group: {
        _id: '$message',
        last_message: { $last: '$date_create', },
        conversation: {
          $push: '$$ROOT',
        },
      },
    },
    {
      $project: {
        input: { $arrayElemAt: ['$conversation.message', 0] },
        output: { $arrayElemAt: ['$conversation.mainTopic', 0] },
        _id: 0,
      },
    },
    { $sort: { last_message: -1 } },
  ]);

Я хочу изменить выход с (текущий результат):

{"input": "Test", "output": "general"},

TO:

{"input": "Test", "output": {general: 1,},},

Теги:
aggregate
mongoose
aggregation-framework

1 ответ

1
Лучший ответ

Чтобы преобразовать { "input": "Test", "output": "general" } в { "input": "Test", "output": { general: 1 } } вам нужен оператор $ arrayToObject, который принимает массив из объекты с полями k и v или массивом из 2-х элементов, как показано ниже:

db.collection.aggregate([
    {
        $project: {
            _id: 0,
            input: 1,
            output: {
                $arrayToObject: [
                    [
                        [ "$output", 1 ]
                    ]
                ]
            }
        }
    }
])

MongoDB детская площадка

  • 0
    Я уже пробовал это (см. Мой пост), ошибка, которую я получаю: MongoError: $ arrayToObject требует ключи объекта 'k' и 'v'. Найдено неверное количество ключей: 1 А теперь: MongoError: $ arrayToObject требует массив пар ключ-значение, где ключ должен иметь тип string. Найденный тип ключа: ноль
  • 0
    без $ я получаю желаемый вывод, но без значения поля, так как это приводит к ошибке. Кажется, что невозможно использовать $ inside arrayToObject. Также ваша игровая площадка MongoDB не имеет результата?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню