Mongoose : 전체 사용자 목록 가져 오기


99

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);
    });
});

기본적으로 모든 사용자가 데이터베이스에서 가져온 경우에만 콜백이 실행되기를 원합니다.


보기에서 액세스하는 방법?
Saani

답변:


173

에서 _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() 일치하는 모든 문서를 배열로 반환하므로 마지막 코드가 해당 배열을 클라이언트로 보냅니다.


보기에서 액세스하는 방법?
Saani

13

데이터를 뷰로 보내려면 다음을 전달하십시오.

    server.get('/usersList', function(req, res) {
        User.find({}, function(err, users) {
           res.render('/usersList', {users: users});
        });
    });

보기 내에서 사용자 변수를 사용하여 데이터를 반복 할 수 있습니다.


9

이것은 @soulcheck의 답변의 개선 사항이며 forEach (닫는 대괄호 누락)의 오타를 수정했습니다.

    server.get('/usersList', (req, res) => 
        User.find({}, (err, users) => 
            res.send(users.reduce((userMap, item) => {
                userMap[item.id] = item
                return userMap
            }, {}));
        );
    );

건배!


보기에서 액세스하는 방법?
Saani

1
설명? 뭐하고 싶어?
Evan P

@Saani /userList경로에 액세스하면 다음 형식의 JSON 개체를 받게됩니다.{"123451": {...user 123451}, "123452": {...user 123452} }
Maxwell sc

8

데이터를 나열하는 매우 쉬운 방법이 있습니다.

server.get('/userlist' , function (req , res) {
 User.find({}).then(function (users) {
 res.send(users);
 });
});

3

비동기 대기 및 화살표 기능으로도 동일하게 수행 할 수 있습니다.

server.get('/usersList', async (req, res) => {

const users = await User.find({});

const userMap = {};
users.forEach((user) => {
    userMap[user._id] = user;
});

res.send(userMap);

});

1

경우에 우리가 원하는 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


1

목록을 가져올 때까지 기다리는 함수를 만듭니다.

getArrayOfData() {
    return DataModel.find({}).then(function (storedDataArray) {
        return storedDataArray;
    }).catch(function(err){
        if (err) {
            throw new Error(err.message);
        }
    });
}

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
        })
    })
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.