#javascript #mongodb #mongoose #leaderboard
Вопрос:
В каждом документе есть поле уровня с числовым значением и twitch_username со строковым значением. Я хочу вернуть эти значения следующим образом:
1. Twitch: <twitch_username> Level: <level>
2. Twitch: <twitch_username> Level: <level>
3. Twitch: <twitch_username> Level: <level>
//...
Я попытался сопоставить данные, запустить цикл for, перенести данные в новый массив и т. Д., Но, похоже, не могу разобраться в этом.
В настоящее время выполняется этот запрос, который возвращает конкретные данные, которые мне нужны, в порядке убывания:
User.find({}).select('twitch_username level -_id').sort({level: 'desc'}).exec((err,docs) => {
// console.log(docs);
});
Приведенный выше запрос возвращает:
[
{ twitch_username: 'user1', level: 67 },
{ twitch_username: 'user2', level: 14 }
]
Это то, чего я хочу, но я не могу по отдельности помечать каждое значение, данные возвращаются, но я ничего не могу с ними сделать.
Комментарии:
1. Итак, каков ваш желаемый результат?
2. Первый блок кода
3. Вам нужно вернуть его в виде целой строки, например «1. Twitch: <Имя пользователя twitch> Уровень… ?
4. Я думаю, что возвращать его в виде целой строки имеет наибольший смысл, поскольку у каждого пользователя будет своя строка в таблице лидеров
5. Смотрите мой ответ ниже. Я свел их к одной строке
Ответ №1:
Вы можете использовать сокращение массива, чтобы уменьшить его до строки
const output = [
{ twitch_username: 'user1', level: 67 },
{ twitch_username: 'user2', level: 14 }
];
Затем используйте функцию уменьшения
output.reduce((final, current, id) => {
return (final (id 1) '. Twitch: ' current.twitch_username ' Level: ' current.level 'n');
}, '')