2016-05-18 4 views
1

Ich möchte den Durchschnitt in einer Sammlung für einen gegebenen Eigenschaftswert erhalten. Was mache ich falsch?MongoDB finde ein gegebenes Feld und erhalte den Durchschnittswert

[{name:'Bob',city:'Barcelona',trips: 1 }, 
{name:'Bruce',city:'Barcelona',trips: 5 }, 
{name:'Bruno',city:'València',trips: 2 }, 
{name:'Bart',city:'Barcelona',trips: 3 }] 

db.x.aggregate([{$group:{city:'Barcelona', $avg:"$trips"}}]); 
+0

db.x.aggregate ([{$ group: {_ id: city, $ durchschnitt: "$ trips"}}]); – profesor79

Antwort

1

Sie müssen die Dokumente filtern, um die $match Operator heißt schaffen eine Pipeline vor dem $group Operator, der alle Dokumente in der Sammlung auswählen, werden auf der jeweiligen Stadt Wert.

Im vorangegangenen $group Operator Pipeline, können Sie dann einen Null-Taste (wie durch das _id Feld bezeichnet) zur Gruppe alle Dokumente aus der vorherigen Pipeline und erhalten die akkumulierte Durchschnitt:

db.x.aggregate([ 
    { "$match": { "city": "Barcelona" } }, 
    { "$group": { "_id": null, "$avg": "$trips" } } 
]); 

Ein weiterer Ansatz (nicht so optimal wie oben) würde alle Dokumente in der Sammlung durch die Stadt Taste und dann filtert danach Gruppe sein:

db.x.aggregate([ 
    { "$group": { "_id": "$city", "$avg": "$trips" } }, 
    { "$match": { "_id": "Barcelona" } } 
]); 
Verwandte Themen