Таблица лидеров из базы данных с использованием MongoDB/Мангуста

#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');
}, '')