Node.js 奇怪的nextObject行为-只有一堆文档

Node.js 奇怪的nextObject行为-只有一堆文档,node.js,mongodb,Node.js,Mongodb,我为一个包含大约500万文档的数据库编写了一个简单的映射脚本。当我独立运行find语句时,find语句会查找所有文档(所以它不可能是这样)。脚本也按预期结束,没有抛出错误消息。但关键是,它很快就会结束。在大约20万份文件之后,我的问题是:为什么 function performMapping (connectionInputDB, connectionOutputDB) { var collectionInput = connectionInputDB.collection(config

我为一个包含大约500万文档的数据库编写了一个简单的映射脚本。当我独立运行find语句时,find语句会查找所有文档(所以它不可能是这样)。脚本也按预期结束,没有抛出错误消息。但关键是,它很快就会结束。在大约20万份文件之后,我的问题是:为什么

function performMapping (connectionInputDB, connectionOutputDB) {
    var collectionInput = connectionInputDB.collection(config.input.collection),
        collectionOutput = connectionOutputDB.collection(config.output.collection),

        successCounter = 0,
        errorCounter = 0,

        cursor = collectionInput.find({ 'changed': { '$gte': config.min } }),

        onNextObject = function (error, obj) {
            var mappedObject;

            if(error) {
                console.log(error);
                process.exit(1);
                return;
            }

            if(obj === null) {
                console.log('Success:', successCounter);
                console.log('Error:', errorCounter);
                console.log('Time:', (new Date().getTime() - startTime) / 1000);
                process.exit(0);
                return;
            }

            try {
                mappedObject = mapScript(obj);
                collectionOutput.update(
                    { 'meta.identkey': mappedObject.meta.identkey },
                    mappedObject, 
                    { upsert: true }, 
                    function (error) {
                        if(error) {
                            console.log('Error:', error);
                            errorCounter += 1;
                            return;
                        }

                        successCounter += 1;

                        cursor.nextObject(onNextObject);
                    }
                );

            } catch(ex) {
                console.log('Error:', obj.data.identkey, ex);
                errorCounter += 1;
                cursor.nextObject(onNextObject);
            }
        };

    cursor.nextObject(onNextObject);
}

我认为nextObject没有按预期工作。最奇怪的是:成功插入/更新的次数总是不同的。

好吧,我想我找到了答案:nextObject不可靠。当光标暂停时,它可能会在再次开始返回文档之前返回一些空响应。所以如果我用这样的东西:

if(obj === null) {

它将在意料之外停止。来源:

控制台.log输出是什么样子的?一些错误消息(如预期的那样):
错误:null[TypeError:无法读取null的属性“1]”
但它如预期的那样结束(但提前):
成功:32046错误:146时间:4959.136