Mongoose:获取完整的用户列表

时间:2012-12-31 15:59:46

标签: javascript node.js mongodb 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);
    });
});

基本上,我希望只有在从数据库中提取所有用户时才执行回调。

10 个答案:

答案 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 collectionupdate之后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})

})