2017-09-15 33 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 } 
相關問題