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

Javascript 如何在MongoDB中以字段名作为键创建自定义对象作为输出?,javascript,node.js,mongodb,mongoose,aggregation-framework,Javascript,Node.js,Mongodb,Mongoose,Aggregation Framework,更改聚合查询的输出,其中键是数据库中的字段名 我尝试了以下方法: 但它会导致以下错误: MongoError:$arrayToObject需要对象键为“k”和“v”。发现不正确的密钥数:1 我想更改输出(当前结果): { “输入”:“测试”, “输出”:“一般” }, 致: { “输入”:“测试”, “输出:{general:1,}, }, 要将{“input”:“Test”,“output”:“general”}转换为{“input”:“Test”,“output”:{general:1}}

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

我尝试了以下方法:

但它会导致以下错误:

MongoError:$arrayToObject需要对象键为“k”和“v”。发现不正确的密钥数:1

我想更改输出(当前结果):

{ “输入”:“测试”, “输出”:“一般” },

致:

{ “输入”:“测试”, “输出:{general:1,}, },

要将
{“input”:“Test”,“output”:“general”}
转换为
{“input”:“Test”,“output”:{general:1}}
,您需要一个运算符,该运算符接受一个包含
k
v
字段的对象数组或一个包含两个元素数组的数组,如下所示:

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

我已经尝试过了(请参阅我的帖子),但得到的错误是:MongoError:$arrayToObject需要对象键为“k”和“v”。发现不正确的键数:1,现在:MongoError:$arrayToObject需要一个键值对数组,其中键的类型必须为string。Found key type:null(不带$I)获得所需的输出,但不带字段值,因为它会导致错误。似乎不可能在arrayToObject中使用$。另外,您的MongoDB游乐场也没有结果?因此我假设由于某种原因,
$output
的计算结果为
null
。数据中缺少某些部分,或者路径定义不正确。你能修改你的答案并粘贴你想要转换的东西吗?或者,如果您有多个文档,其中一些文档包含
null
值,您可以使用这些值指定默认值value@cxzzy您需要美元符号来引用现有字段,否则它只是一个字符串,在$arrayToObject中是允许的,正如您在Mongo游乐场示例中看到的那样,啊,就是这样!伟大的谢谢我确实有一些空值,设置默认值修复了这个问题。
db.collection.aggregate([
    {
        $project: {
            _id: 0,
            input: 1,
            output: {
                $arrayToObject: [
                    [
                        [ "$output", 1 ]
                    ]
                ]
            }
        }
    }
])