2017-09-15 4 views
0

J'essaie de trouver la somme de documents qui ont les mêmes valeurs sur un ensemble de champs en utilisant mongo shell, ce sont des exemples de documents,comment obtenir la somme agrégée sur un ensemble de champs avec les mêmes valeurs en utilisant 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" 
} 

la requête que j'ai essayé est,

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

mais il alla chercher 0 enregistrements. Aussi, j'aime savoir combien de ces documents ont été trouvés, donc je me demande comment résoudre le problème.

+1

Vous mettez 'count' au mauvais endroit. En fait, cela devrait produire une erreur. A la place, faites '{$ group: {' _id ': {nom:' $ name ', id:' $ id ', date:' $ date ', montant:' $ amount '}, compte: {' $ sum ': 1}}} 'pour le pipeline $ group'. –

+0

@NeilLunn thx, ça marche maintenant. J'aime aussi savoir combien de documents de résultats générés en utilisant agrégat, comment faire cela? – daiyue

+0

comment faire pour additionner le nombre dans la requête? – daiyue

Répondre

1

Vous pouvez l'utiliser.

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

Résultat:

{ "_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 }