Mongoose: Получить полный список пользователей
Я попытался использовать Mongoose для отправки списка всех пользователей следующим образом:
server.get('/usersList', function(req, res) {
var users = {};
User.find({}, function (err, user) {
users[user._id] = user;
});
res.send(users);
});
Конечно, res.send(users);
собирается отправить {}
, чего я не хочу. Есть ли альтернатива find
с немного другой семантикой, где я мог бы сделать следующее?
server.get('/usersList', function(req, res) {
User.find({}, function (err, users) {
res.send(users);
});
});
По сути, я хочу, чтобы обратный вызов выполнялся только тогда, когда все пользователи были извлечены из базы данных.
Ответы
Ответ 1
Ну, если вы действительно хотите вернуть отображение от _id
до user
, вы всегда можете сделать:
server.get('/usersList', function(req, res) {
User.find({}, function(err, users) {
var userMap = {};
users.forEach(function(user) {
userMap[user._id] = user;
});
res.send(userMap);
});
});
find()
возвращает все сопоставимые документы в массиве, поэтому ваш последний код отпирается отправляет этот массив клиенту.
Ответ 2
Если вы хотите отправить данные в окно просмотра, выполните следующие действия.
server.get('/usersList', function(req, res) {
User.find({}, function(err, users) {
res.render('/usersList', {users: users});
});
});
Внутри вашего представления вы можете прокручивать данные с помощью переменных пользователей
Ответ 3
Это просто улучшение ответа @soulcheck и исправление опечатки в forEach (отсутствует закрывающая скобка);
server.get('/usersList', (req, res) =>
User.find({}, (err, users) =>
res.send(users.reduce((userMap, item) => {
userMap[item.id] = item
return userMap
}, {}));
);
);
ура!
Ответ 4
Был очень простой способ перечислить ваши данные:
server.get('/userlist' , function (req , res) {
User.find({}).then(function (users) {
res.send(users);
});
});
Ответ 5
То же самое можно сделать с помощью функции асинхронного ожидания и стрелки
server.get('/usersList', async (req, res) => {
const users = await User.find({});
const userMap = {};
users.forEach((user) => {
userMap[user._id] = user;
});
res.send(userMap);
});
Ответ 6
В случае, если мы хотим list all documents in Mongoose collection
после update
или delete
Мы можем отредактировать функцию примерно так:
exports.product_update = function (req, res, next) {
Product.findByIdAndUpdate(req.params.id, {$set: req.body}, function (err, product) {
if (err) return next(err);
Product.find({}).then(function (products) {
res.send(products);
});
//res.send('Product udpated.');
});
};
Это будет list all documents
об успехе, а не просто showing success message