Cómo usar la mongoose distinta, saltar y limitar juntos

Necesito usar skip y limit para la paginación, y el distinct para no devolver valores iguales.

Si yo uso

 MyModel.find().distinct('blaster', function(err, results) { res.render('index', { data: results }); }); 

Esto funciona.

Si yo uso

 MyModel.find().sort('brand').skip((page-1)*15).limit(15).exec(function(err, results) { res.render('index', { data: results }); }); 

Esto también está funcionando, pero ¿cómo usar ambos?

Si lo bash, el error mostrará:

 Error: skip cannot be used with distinct 

Tu no haces eso .distinct() es un método que devuelve una “matriz”, y por lo tanto no puede modificar algo que no sea un “Cursor” con “modificadores de cursor” como .limit() y .skip() .

Lo que quieres es el método .aggregate() . Mucho más que simplemente sumr cosas:

 MyModel.aggregate( [ { "$group": { "_id": "$blaster" } }, { "$skip": ( page-1 ) * 15 }, { "$limit": 15 } ], function(err,results) { // results skipped and limited in here } ); 

El marco de agregación proporciona otra forma de lograr resultados “distintos”. Pero de una manera más flexible. Consulte a los operadores para obtener $group , $skip y $limit .