我为以下数据集的嵌套聚合创建了一个mongo查询
即
[{
bank: 'wells fargo',
time: '21/05/2019 02:01 AM',
amount: 1000
},
{
bank: 'bank of america',
time: '16/06/2019 02:46 AM',
amount: 4840
}]
我需要为嵌套聚合创建一个mongoquery,即每次找到总和的银行
我创建了以下查询
db.transactions.aggregate([
{
$group:
{
_id:
{
'bank': '$bank',
'time': '$time'
},
sum:
{
$sum: '$amount'
}
}
},
{
$group:
{
_id: '$_id.bank',
data: {'$push': '$$ROOT'},
sum: {$sum: '$sum'}
}
}
]).pretty()
给出的结果为
{"_id" : "wells fargo",
"data" : [
{
"_id" : {
"bank" : "wells fargo",
"time" : "21/05/2019 02:01 AM"
},
"sum" : 1000
}]}
它工作正常,但是这里的问题是我需要按时间对结果进行排序,所以我在末尾添加了像
db.transactions.aggregate([
{
$group:
{
_id:
{
'bank': '$bank',
'time': '$time'
},
sum:
{
$sum: '$amount'
}
}
},
{
$group:
{
_id: '$_id.bank',
data: {'$push': '$$ROOT'},
sum: {$sum: '$sum'}
}
}, {$sort: {time:-1}}
]).pretty()
但是这似乎不起作用。实施排序方法有什么问题?
答案 0 :(得分:0)
进行分组时,您忽略了time属性,这就是为什么按时间对数据进行排序无法使用的原因,因为time属性不再存在。 要解决此问题,只需在组管道中添加time属性。
db.transactions.aggregate([
{
$group:
{
_id:
{
'bank': '$bank',
'time': '$time'
},
sum:
{
$sum: '$amount'
}
}
},
{
$group:
{
_id: '$_id.bank',
// Adding time property.
time: { $first: '$_id.time'},
data: {'$push': '$$ROOT'},
sum: {$sum: '$sum'}
}
}, {$sort: {time:-1}}
]).pretty()