web-dev-qa-db-ja.com

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

基本的に、すべてのユーザーがデータベースから取得されたときにのみコールバックが実行されるようにします。

75
Randomblue

さて、本当に_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()は、一致するすべてのドキュメントを配列で返します。そのため、最後のコードは、その配列をクライアントに送信します。

141
soulcheck

データをビューに送信する場合は、次を渡します。

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

ビュー内で、変数ユーザーを使用してデータをループできます。

12
bstory

これは、@ soulcheckの答えの改善であり、forEachのタイプミスの修正(閉じ括弧がない)です。

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

乾杯!

8
Evan P

データをリストする非常に簡単な方法がありました:

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

非同期待機および矢印機能でも同じことができます

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

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

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

res.send(userMap);

});
1
vithu shaji

updateまたはdeleteの後にlist all documents in Mongoose collectionが必要な場合

関数を次のように編集できます。

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になります

0
Abdallah Okasha