从集合中获取并迭代

时间:2016-12-15 19:33:54

标签: node.js mongodb

我想在api中使用循环返回数据。 但是你知道foreach循环Asynchronous和我的allData json对象每次都是null。 我希望json对象不是空的。 这就是为什么......我想在下面进行同步循环

var allData = [];
router.get('/user', function (req, res, next) {

    var cursor = mdb.collection('USERS').find();
    cursor.forEach(function (doc) {
        allData.push(doc);
        console.log(doc);
    })
    console.log(allDaTa);
});

打印:

[ ] //<-- my json object is null (allData) 
<br><br> 
{ 
    _id: 5830ce676b184b1210d66749,
    USERNAME: 'burakgumus'
}

我再说<br><br> 我希望json对象不为空,我不想cursor.toArray().<br>

2 个答案:

答案 0 :(得分:2)

您需要将回调函数传递给查询。因为它是异步调用,所以稍后当你完成剩下的代码时会返回结果:

var allData = [];
router.get('/user', function (req, res, next) {

    mdb.collection('USERS').find({}).toArray(function(err, cursor) {
        cursor.forEach(function (doc) {
            allData.push(doc);
            console.log(doc);
        });
        console.log(allDaTa);
        next();
    });

});

答案 1 :(得分:0)

除了Shaharyar的回答,如果你想要一个回复,你还必须在响应上调用.send()函数,即res.send(allData)

var allData = [];
router.get('/user', function (req, res, next) {

mdb.collection('USERS').find({}).toArray(function(err, cursor) {
    cursor.forEach(function (doc) {
        allData.push(doc);
        console.log(doc);
    });
    console.log(allDaTa);
    res.send(allData);
    next();
});

});