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