如何在MongoDB中将对象值移动到数组中?
我想使用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
{
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
,下面是一个示例:由于您的示例,它成功了。真的很感激@米克尔