Как создать пользовательский объект в качестве вывода с именем поля в качестве ключа в MongoDB? - PullRequest
1 голос
/ 04 апреля 2019

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

Я попробовал следующее: Как использовать значение поля в качестве имени ключа в результате 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 } },
  ]);

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

{ «вход»: «тест», «вывод»: «общий» },

TO:

{ «вход»: «тест», «output»: {general: 1,}, },

1 Ответ

1 голос
/ 04 апреля 2019

Чтобы преобразовать { "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 детская площадка

...