Mongodb Sum查询不返回任何结果



我有这个活动行集合的例子

{
"_id" : ObjectId("5ec90b5258a37c002509b27d"), 
"user_hash" : "asdsc4be9fe7xxx", 
"type" : "Expense", 
"name" : "Lorem", 
"amount" : 10000, 
"date_created" : 1590233938 
}

我想用这个聚合代码收集活动的总量

db.activities.aggregate(
[
{
$group: 
{
_id: "$id", 
total: { $sum: "$amount" } 
} 
}, 
{ 
$match: { type: "Expense", "user_hash": "asdsc4be9fe7xxx" } 
} 
] 
)

预期结果:{_id:null,总计:xxxxx}

实际结果:

有什么解决方案吗?提前感谢

您的查询有两个问题:

  1. 您对每个单独的文档进行总和聚合,而不是对整个集合进行聚合,因为您指定了_id: "$id",,而需要指定_id: null
  2. 您正在执行集合中的match阶段,组阶段之后。但您需要在之前执行,因为分组后的结果如下:
{
"_id": null,
"total": 15
}

正如您所看到的,该对象没有原始对象所具有的任何字段,因此0结果将匹配。阶段的顺序很重要,因为基本上每个阶段都会根据前一阶段的结果执行一些操作(mongodb自动优化阶段时也有一些例外,但这些阶段中的不同顺序不会产生不同的结果(。

所以查询应该是:

db.activities.aggregate(
[
{ 
$match: { type: "Expense", "user_hash": "asdsc4be9fe7xxx" } 
},
{
$group: 
{
_id: null, 
total: { $sum: "$amount" } 
} 
},
] 
)

最新更新