更改聚合查询的输出,其中键是数据库中的字段名称。
我尝试了以下操作: How to use field value as key name in Mongodb result
但是会导致以下错误:
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”:“测试”, “输出”:“常规” }
收件人:
{ “ input”:“测试”, “输出”:{常规:1,}, }
答案 0 :(得分: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 ]
]
]
}
}
}
])