我的Collection有一个类似这样的架构:
_id name #week KPI_1 KPI_2 KPI_3
... AA001 01 0.93 0.35 0.88
... AA001 49 0.97 0.40 0.98
... AA001 50 0.96 0.30 0.98
我想将该集合分组为:
_id name KPI_1 KPI_2 KPI_3
... AA001 [ 01 : 0.93, [ 01 : 0.35, [01 : 0.88,
49 : 0.97, 49 : 0.40, 49 : 0.98
50 : 0.96 50 : 0.30 50 : 0.98
] ] ]
但问题是我的Collection有70多个键,我想推送大约50个“列”,我不能一个一个地写,因为架构可能会随着时间而改变。
无论如何选择哪些“列”不推?
答案 0 :(得分:0)
附加功能:
$arrayToObject
- 将数组转换为对象。$push
- 将生成的对象放入数组。示例:
db.getCollection('t').aggregate([
{
$group: {
_id: "$name",
"KPI_1": { $push: { $arrayToObject: [[["$#week", "$KPI_1"]]] } },
"KPI_2": { $push: { $arrayToObject: [[["$#week", "$KPI_2"]]] } },
"KPI_3": { $push: { $arrayToObject: [[["$#week", "$KPI_3"]]] } }
}
},
{
$project: {
_id: 0,
"name": "$_id",
"KPI_1": 1,
"KPI_2": 1,
"KPI_3": 1
}
}
])