Изменение выходных данных запроса агрегации, где ключом является имя поля из базы данных.
Я пробовал следующее: Как использовать значение поля в качестве имени ключа в результате 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,},},
Чтобы преобразовать { "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 ]
]
]
}
}
}
])