devuelva el documento con el último subdocumento solo en el agregado mongodb

Tengo estos esquemas de mongoose:

var Thread = new Schema({ title: String, messages: [Message] }); var Message = new Schema({ date_added: Date, author: String, text: String }); 

¿Cómo devuelve todos los subprocesos con su último subdocumento de mensaje (límite 1)?

Actualmente, estoy filtrando los resultados de Thread.find() en el lado del servidor, pero me gustaría mover esta operación en MongoDb usando el aggregate() para asuntos de rendimiento.

Puedes usar $unwind , $sort y $group para hacer esto usando algo como:

 Thread.aggregate([ // Duplicate the docs, one per messages element. {$unwind: '$messages'}, // Sort the pipeline to bring the most recent message to the front {$sort: {'messages.date_added': -1}}, // Group by _id+title, taking the first (most recent) message per group {$group: { _id: { _id: '$_id', title: '$title' }, message: {$first: '$messages'} }}, // Reshape the document back into the original style {$project: {_id: '$_id._id', title: '$_id.title', message: 1}} ]);