У меня есть mongodb с коллекцией, содержащей все песни, когда-либо попавшие в музыкальные чарты. Я написал сценарий, который принимает данные о количестве песен, которые я хочу, и о том, из какого года я хочу случайный выбор песен. Все идет нормально.
Однако я пытаюсь сделать это так, чтобы в возвращаемых песнях не было повторяющихся песен, что я пытаюсь сделать, вставляя значение _id каждой песни в массив по мере его возврата, а затем используя $ nin в этап агрегирования $ match.
var getSongs = function(number, year, db, callback) {
var collection = db.collection('songsList');
var songIds = [];
var chartSongs = [];
for (var i = 0; i < number; i++) {
// Get one random document from the collection.
collection.aggregate([
{
$match: { '_id': { '$nin': songIds }, 'songYear': year }
},
{
$sample: { size: 1 }
}
],
function(err, chart) {
songIds.push(chart[0]._id);
chartSongs.push(chart[0]);
if (songIds.length === number) {
callback(chartSongs);
}
})
}
};
Однако, хотя мне возвращается правильное количество песен, я все равно получаю повторяющиеся песни в этом случайном списке.
Если кто-нибудь может предложить предложение или даже предложить мне лучший способ сделать это, я был бы очень признателен.