2013-05-07 8 views
7

In Aggregation Framework Examples, c'è un primo & ultimo esempio:Posso ottenere il primo documento (non il campo) nella query aggregata 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" } } } 

posso ottenere lo zipcodes documento completo con $first?

Modificato:

Per chiarire, io uso CoffeeScript nella mia app espresso fare la seguente cosa, sembra stupido:

@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}} 

I campi (id, nome, ... tag) sono tutti campo dello schema del documento. Voglio solo sapere, c'è un modo per farlo in singolo $first.

+0

Che cosa stai cercando di ottenere esattamente? È ordinamento e $ prima/$ l'ultima volta si suppone di ottenere città della popolazione minima e massima? –

+0

Grazie per la tua risposta, ho appena cambiato domanda per chiarire cosa voglio fare. – wuhaixing

+0

non c'è un modo per farlo in questo momento - ho pensato che ci fosse un biglietto jira per questa funzionalità ma non riesco a trovarlo. –

risposta

10

Questo è ora possibile in 2.6, perché è possibile accedere al documento in elaborazione con $$ ROOT. Qualcosa del genere dovrebbe funzionare:

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

Esattamente quello che cercavo –

Problemi correlati