Mongoose: उपयोगकर्ताओं की पूरी सूची प्राप्त करें


97

मैंने सभी उपयोगकर्ताओं की सूची को भेजने के लिए 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);
    });
});

अनिवार्य रूप से, मैं चाहता हूं कि कॉलबैक को तभी निष्पादित किया जाए जब सभी उपयोगकर्ता डेटाबेस से लाए गए हों।


दृश्य में इसे कैसे एक्सेस किया जाए?
सायानी

जवाबों:


170

ठीक है, यदि आप वास्तव में से एक मानचित्रण वापस करना चाहते _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() सभी मिलान दस्तावेज़ों को एक सरणी में देता है, इसलिए आपका अंतिम कोड स्निप उस क्लाइंट को भेजता है।


दृश्य में इसे कैसे एक्सेस किया जाए?
सायानी

12

यदि आप डेटा को एक दृश्य में भेजना चाहते हैं, तो निम्नलिखित को पास करें।

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

चियर्स!


दृश्य में इसे कैसे एक्सेस किया जाए?
सायानी

1
समझाने? आप क्या करना चाहते हैं?
इवान पी

@ सानी जब आप /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

समान को async वेट और एरो फंक्शन के साथ किया जा सकता है

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बाद करना चाहते हैंupdatedelete

हम फंक्शन को कुछ इस तरह से एडिट कर सकते हैं:

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
        })
    })
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.