如何在MongoDB中创建一个以字段名称为键的自定义对象作为输出?

时间:2019-04-04 09:30:54

标签: javascript node.js mongodb mongoose aggregation-framework

更改聚合查询的输出,其中键是数据库中的字段名称。

我尝试了以下操作: 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,},    }

1 个答案:

答案 0 :(得分:1)

要将{ "input": "Test", "output": "general" }转换为{ "input": "Test", "output": { general: 1 } },您需要$arrayToObject运算符,该运算符采用具有kv字段的对象数组或2的数组元素数组如下:

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

MongoDB playground