我尝试使用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);
});
});
基本上,我希望只有在从数据库中提取所有用户时才执行回调。
答案 0 :(得分:133)
好吧,如果你真的想要从_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()
返回数组中所有匹配的文档,因此您的上一个代码剪切将该数组发送到客户端。
答案 1 :(得分:12)
如果您想将数据发送到视图,请传递以下内容。
server.get('/usersList', function(req, res) {
User.find({}, function(err, users) {
res.render('/usersList', {users: users});
});
});
在视图中,您可以使用变量用户
循环访问数据答案 2 :(得分:8)
有一种非常简单的方法可以列出您的数据:
server.get('/userlist' , function (req , res) {
User.find({}).then(function (users) {
res.send(users);
});
});
答案 3 :(得分:7)
这只是对@soulcheck答案的改进,并解决了forEach中的拼写错误(缺少结束括号);
server.get('/usersList', (req, res) =>
User.find({}, (err, users) =>
res.send(users.reduce((userMap, item) => {
userMap[item.id] = item
return userMap
}, {}));
);
);
喝彩!
答案 4 :(得分:2)
可以使用异步等待和箭头功能来完成
server.get('/usersList', async (req, res) => {
const users = await User.find({});
const userMap = {};
users.forEach((user) => {
userMap[user._id] = user;
});
res.send(userMap);
});
答案 5 :(得分:0)
如果我们想在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
答案 6 :(得分:0)
使函数等待列表被获取。
getArrayOfData() {
return DataModel.find({}).then(function (storedDataArray) {
return storedDataArray;
}).catch(function(err){
if (err) {
throw new Error(err.message);
}
});
}
答案 7 :(得分:0)
我的解决方案
User.find()
.exec()
.then(users => {
const response = {
count: users.length,
users: users.map(user => {
return {
_id: user._id,
// other property
}
})
};
res.status(200).json(response);
}).catch(err => {
console.log(err);
res.status(500).json({
success: false
})
})
答案 8 :(得分:0)
你可以试试这个 -
User.find().exec(function(err, users){
console.log('users : ', users);
console.log('err', err);
return res.send(users);
});
答案 9 :(得分:-1)
你也可以通过异步函数来获取所有用户
await User.find({},(err,users)=>{
if (err){
return res.status(422).send(err)
}
if (!users){
return res.status(422).send({error:"No data in the collection"})
}
res.send({Allusers:users})
})