Tengo el siguiente código en mi controlador Mongoose/NodeJS, que se usa para mezclar los registros en una colección. La reproducción aleatoria funciona como se esperaba.
En la colección 'Sliders', solo quiero mostrar 4 registros aleatorios en la parte delantera; sin embargo, quiero limitar la cantidad de registros en el controlador en lugar de dividirlos en el front-end, porque hay muchos registros en la colección.
Por el momento, mi código los limita antes de mezclarlos, por lo que siempre muestra los mismos 4 registros. ¿Cómo puedo mezclar la colección en el controlador y luego limitarla a 4 registros en el controlador, para poder mostrarlos en la interfaz?
function shuffleArray(array) { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } } const sliders = await Slider.find({ "category": "Slider" }).limit(4); shuffleArray(sliders);Pruebe la agregación con $match y $sample https://mongoosejs.com/docs/api/aggregate.html#aggregate_Aggregate
const agg = Slider.aggregate([ {$match: {"category": "Slider"}}, {$sample: { size : 4 }} ]); const sliders = await agg.exec();