2013-05-07 10 views
7

W Aggregation Framework Examples, jest pierwszym & Ostatni przykład:Czy mogę uzyskać pierwszy dokument (nie pole) w kwerendzie agregującej MongoDB?

db.zipcodes.aggregate({ $group: 
         { _id: { state: "$state", city: "$city" }, 
          pop: { $sum: "$pop" } } }, 
         { $sort: { pop: 1 } }, 
         { $group: 
         { _id : "$_id.state", 
          biggestCity: { $last: "$_id.city" }, 
          biggestPop: { $last: "$pop" }, 
          smallestCity: { $first: "$_id.city" }, 
          smallestPop: { $first: "$pop" } } } 

mogę uzyskać pełny zipcodes dokument z $first?

Zmieniano:

celu wyjaśnienia, używam coffeescript w mojej wyraźnej aplikacji wykonaj następujące rzeczą wydaje głupie:

@aggregate(
    { 
    $group : 
     _id : "$category" 
     cnt : { $sum : 1 } 
     id: {$first: "$_id"} 
     name: {$first: "$name"} 
     description: {$first: "$description"} 
     region: {$first: "$region"} 
     startedAt: {$first: "$startedAt"} 
     titleImage: {$first: "$titleImage"} 
     tags: {$first: "$tags"} 
    }, 
    {$sort :{"createdAt" : -1}} 

Pola (id, nazwa, ... tagi) są wszystkie pole schematu dokumentu. Po prostu chcę wiedzieć, czy jest jakiś sposób, aby to zrobić w pojedynczym $first.

+0

Co dokładnie próbujesz zdobyć? Czy sortowanie i pierwsze/ostatnie $ mają na celu uzyskanie minimalnych i maksymalnych populacji miast? –

+0

Dziękuję za odpowiedź, właśnie zmieniłem pytanie, aby wyjaśnić, co chcę zrobić. – wuhaixing

+0

nie ma sposobu, aby zrobić to teraz - myślałem, że był bilet jira dla tej funkcjonalności, ale nie mogę go znaleźć. –

Odpowiedz

10

Jest to teraz możliwe w wersji 2.6, ponieważ można uzyskać dostęp do dokumentu przetwarzanego za pomocą $$ ROOT. Coś takiego powinno zadziałać:

@aggregate(
{ 
    $group : 
     _id : "$category" 
     cnt : { $sum : 1 } 
     first: {$first : "$$ROOT"} 
{$sort :{"createdAt" : -1}} 
) 
+0

Dokładnie to, co byłem po –