最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How to call mongodb collection getall by node.js? - Stack Overflow

programmeradmin4浏览0评论

I wanna take the whole list of notifies from mongo db but it returns empty([]) array also I know that i need callback or shorter way of it . Do you have any idea for collecting any data from mongodb by node.js? If I call this /Notifies method (http://127.0.0.1:5000/Notifies)

var MongoClient = require('mongodb').MongoClient;
var express = require("express");
var app = express();


format = require('util').format;
MongoClient.connect('mongodb://127.0.0.1:27017/Test', function (err, db) {
    if (err) {
        throw err;
    } else {
        console.log("successfully connected to the database");
    }
    db.close();
});

app.get('/Notifies', function (req, res) {

    // BAD! Creates a new connection pool for every request
    console.log('connected');
    MongoClient.connect('mongodb://127.0.0.1:27017/Test', function (err, db) {
        if (err) throw err;

        var coll = db.collection('Notifies');
        var arr = [];
        coll.find({}, function (err, docs) {
            docs.each(function (err, doc) {
                if (doc) {
                    console.log(doc);
                    arr.push(doc);

                } else {
                    res.end();
                }
            });
        });
        return res.json(arr);
    });
});

var port = Number(process.env.PORT || 5000);
app.listen(port, function () {
    console.log("Listening on " + port);
})

I wanna take the whole list of notifies from mongo db but it returns empty([]) array also I know that i need callback or shorter way of it . Do you have any idea for collecting any data from mongodb by node.js? If I call this /Notifies method (http://127.0.0.1:5000/Notifies)

var MongoClient = require('mongodb').MongoClient;
var express = require("express");
var app = express();


format = require('util').format;
MongoClient.connect('mongodb://127.0.0.1:27017/Test', function (err, db) {
    if (err) {
        throw err;
    } else {
        console.log("successfully connected to the database");
    }
    db.close();
});

app.get('/Notifies', function (req, res) {

    // BAD! Creates a new connection pool for every request
    console.log('connected');
    MongoClient.connect('mongodb://127.0.0.1:27017/Test', function (err, db) {
        if (err) throw err;

        var coll = db.collection('Notifies');
        var arr = [];
        coll.find({}, function (err, docs) {
            docs.each(function (err, doc) {
                if (doc) {
                    console.log(doc);
                    arr.push(doc);

                } else {
                    res.end();
                }
            });
        });
        return res.json(arr);
    });
});

var port = Number(process.env.PORT || 5000);
app.listen(port, function () {
    console.log("Listening on " + port);
})
Share Improve this question edited Dec 20, 2016 at 23:12 706Astor 2852 silver badges10 bronze badges asked Dec 20, 2016 at 22:16 PenguenPenguen 17.3k45 gold badges134 silver badges213 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 12

Don't use for docs.each instead of this use .toArray so it will return directly a array and then use Json.stringify to convert it into json string array

MongoClient.connect('mongodb://127.0.0.1:27017/Test', function (err, db) {
    if (err) throw err;

    var coll = db.collection('Notifies');

    coll.find({}).toArray(function (err, result) {
        if (err) {
            res.send(err);
        } else {

            res.send(JSON.stringify(result));
        }
    })

});

The problem is you are returning the empty array from within the function, before the actual DB operation occurs. You need to move the line return res.json(arr); into the find function:

app.get('/Notifies', function (req, res) {

    // BAD! Creates a new connection pool for every request
    console.log('connected');
    MongoClient.connect('mongodb://127.0.0.1:27017/Test', function (err, db) {
        if (err) throw err;

        var coll = db.collection('Notifies');
        var arr = [];
        coll.find({}, function (err, docs) {
            console.log(docs);
            docs.each(function (err, doc) {
                if (doc) {
                    console.log(doc);
                    arr.push(doc);

                } else {
                    res.end();
                }
            });
            return res.json(arr);
        });
    });
});

Also, for future use, do not reuse variable names in nested functions (you have 3 functions that use the variable err).

发布评论

评论列表(0)

  1. 暂无评论