MongoDB cursor.each方法返回最终的null值

时间:2018-07-06 11:43:42

标签: node.js mongodb

var cursor = db.collection('Carreer').find();
cursor.each(function (err, results) {
    // the last results call is null
});

此循环似乎额外运行了一次,返回null作为表中每一列的最后一个值。 如何阻止cursor.each返回null值?

1 个答案:

答案 0 :(得分:3)

这是cursor.each的预期行为。 null值指示没有其他结果(即,光标已耗尽/空并关闭)。如果您不希望在光标结束时进行额外的null调用,则可以使用cursor.forEach

db.collection('Carreer').find().forEach(function(doc) {
  // handle
}, function(err) {
  // done or error
});

还请注意:

  

cursor.each is deprecated

为什么使用null

cursor.each方法只有one callback,唯一知道游标结束的方法是最后一个null。一个示例实现可以是:

function fetchAllCareers(callback) {
    const results = [];
    const cursor = db.collection('Carreer').find();
    cursor.each(function(error, result) {
        if (error) {
            callback(error);
            return;
        }
        if (result === null) { // This was the last iteration, we finished
            callback(null, results);
            return;
        }
        results.push(result);
    });
}

另一方面,cursor.forEach方法有一个iterator callback和一个second callback,让您知道迭代已经完成。一个示例实现可以是:

function fetchAllCareers(callback) {
    const results = [];
    const cursor = db.collection('Carreer').find();
    cursor.forEach(function(result) {
        results.push(result);
    }, function(error) { // all iterations finished
        callback(error, results);
    });
}