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.