2017-09-15 28 views
0

我试图找到在使用mongo shell的一组字段上具有相同值的文档总和,这些是示例文档,如何使用mongo获取具有相同值的字段集合上的总和

{ 
"id" : "1", 
"date" : ISODate("2017-04-29T00:00:00.000Z"), 
"amount" : 697, 
"name" : "vendor1" 
} 

{ 
"id" : "2", 
"date" : ISODate("2017-04-29T00:00:00.000Z"), 
"amount" : 380 
"name" : "vendor2" 
} 

{ 
"id" : "2", 
"date" : ISODate("2017-04-29T00:00:00.000Z"), 
"amount" : 380, 
"name" : "vendor2" 
} 

{ 
"id" : "3", 
"date" : ISODate("2017-04-29T00:00:00.000Z"), 
"amount" : 702, 
"name" : "vendor3" 
} 

{ 
"id" : "3", 
"date" : ISODate("2017-04-29T00:00:00.000Z"), 
"amount" : 702, 
"name" : "vendor3" 
} 

查询我曾尝试是,

db.results.aggregate([ 
{$group:{'_id':{name:'$name', id:'$id', date:'$date', amount:'$amount', 
count:{'$sum':1}}}}, 
{$match:{'count':{'$gt':1}}}]) 

但它获取0的记录。我也想知道有多少这样的文件被发现,所以我想知道如何解决这个问题。

+1

你把'count'错了地方。它实际上应该会产生一个错误。相反,{$ group:{'_id':{name:'$ name',id:'$ id',date:'$ date',amount:'$ amount'},count:{'$ sum': 1}}}用于$ group管道。 –

+0

@NeilLunn thx,它现在有效。我也想知道使用聚合生成的结果文件数量,怎么做? – daiyue

+0

如何在查询中计数? – daiyue

回答

1

您可以使用它。

db.results.aggregate([ 
{ $group:{'_id': {name:'$name', id:'$id', date:'$date', amount:'$amount'} 
       , count: {$sum: 1} } } 
]) 

结果:

{ "_id" : { "name" : "vendor3", "id" : "3", "date" : ISODate("2017-04-29T00:00:00Z"), "amount" : 702 }, "count" : 2 } 
{ "_id" : { "name" : "vendor2", "id" : "2", "date" : ISODate("2017-04-29T00:00:00Z"), "amount" : 380 }, "count" : 2 } 
{ "_id" : { "name" : "vendor1", "id" : "1", "date" : ISODate("2017-04-29T00:00:00Z"), "amount" : 697 }, "count" : 1 } 
相关问题