Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在MongoDB中将对象值移动到数组中?_Mongodb_Aggregation Framework - Fatal编程技术网

如何在MongoDB中将对象值移动到数组中?

如何在MongoDB中将对象值移动到数组中?,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我想使用MongoDB聚合框架进行数据转换。我被困了好几个小时,似乎无法摆脱它 示例输入数据: { a1: "value a1", a2: "value a2" }, { a1: "value a3", a2: "value a4" }, { a1: "value a5", a2: "value a6" } 我想有下面的输出 { a1: ["value a1", "value a3", "value a5"], a2: ["value a2", "value a

我想使用MongoDB聚合框架进行数据转换。我被困了好几个小时,似乎无法摆脱它

示例输入数据:

{
  a1: "value a1",
  a2: "value a2"
},
{
  a1: "value a3",
  a2: "value a4"
},
{
  a1: "value a5",
  a2: "value a6"
}
我想有下面的输出

{
  a1: ["value a1", "value a3", "value a5"],
  a2: ["value a2", "value a4", "value a6"]
}

我假设您希望动态地运行这种聚合(不知道键名)。在这种情况下,您需要从开始,然后运行double为每个键获取一个数组,在最后一步中,您需要运行以获取作为键的键名:

db.collection.aggregate([
    {
        $project: {
            doc: {
                $filter: {
                    input: { $objectToArray: "$$ROOT" },
                    cond: { $ne: [ "$$this.k", "_id" ] }
                }
            }
        }
    },
    {
        $unwind: "$doc"
    },
    {
        $group: {
            _id: "$doc.k",
            values: { $push: "$doc.v" }
        }
    },
    {
        $group: {
            _id: null,
            data: { $push: { k: "$_id", v: "$values" } }
        }
    },
    {
        $replaceRoot: {
            newRoot: {
                $arrayToObject: "$data"
            }
        }
    }
])

编辑:如果您知道键的名称,问题就会变得非常简单:

db.collection.aggregate([
    {
        $group: {
            _id: null,
            a1: { $push: "$a1" },
            a2: { $push: "$a2" }     
        }
    }
])

我知道关键的名字。成功了!我是MongoDB noob,现在我需要清理数组,删除所有空(空格)值。CSV导入的数据质量较差。这可以使用相同的聚合管道来完成吗?例如,{a1:[“”,“”,“,”a1的值“,”a3的值“,”a5的值“,”到{a1:[”a1的值“,”a3的值“,”a5的值“]}@Chester尝试使用
$filter
,下面是一个示例:由于您的示例,它成功了。真的很感激@米克尔