Не уверен, если вам действительно нужно несколько запросов, потому что я понятия не имею о вашей структуре базы данных.Вот отсортированный код:
exports.leaderboarduser = (userName) => {
return new Promise(async (resolve, reject) => {
try {
const current_player = await user.findOne({ userName: userName });
const next_playerResult = await user.find({ _id: { $ne: player._id }, score: { $gte: player.score } }).sort({ score: 1, userName: 1 }).limit(1);
const next_player = next_playerResult[0] || {};
const previous_playerResult = await user.find({ _id: { $ne: player._id }, score: { $lte: player.score } }).sort({ score: -1, userName: -1 }).limit(1);
const previous_player = previous_playerResult[0] || {};
resolve([current_player, next_player, previous_player]); // change the order as per requirement
// OR better send an object like: resolve({ current_player, next_player, previous_player });
} catch (err) {
reject(err);
}
});
}
Проблема в том, что вы неправильно вызываете асинхронные функции.Также нет блока catch для обработки ошибок.Я использовал async / await внутри обещания обрабатывать асинхронные вызовы БД.И тогда где-нибудь в вашем проекте вы можете вызвать эту функцию следующим образом:
leaderboarduser('testName')
.then((users) => {
console.log("users are: ", users);
...
// do something with users
})
.catch((err) => {
console.log("Error: ", err);
...
// handle error
});
Также limit () в mongoose используется для ограничения количества записей.Поскольку в вашем случае вам нужна только одна запись, вы должны передать 1 , а не -1 .
Надеюсь, это поможет:)