Couchdb 使用分页更新文档始终会忽略一半的文档

Couchdb 使用分页更新文档始终会忽略一半的文档,couchdb,pouchdb,cloudant,Couchdb,Pouchdb,Cloudant,我有一个包含300k-400k文档的非常大的数据库,因此我必须使用parseInt定期(比如每周)将一些字段从string类型更新为number类型。我使用typeof操作符为其中一个字段创建了一个视图,并在视图中查询所有string键并更新这些文档 以下是我的视图的映射功能: 功能(doc){ 如果(doc.xyz的类型!=“未定义”){ 发出(doc.xyz的类型,空); } } 下面是我如何更新文档的: 函数更新属性(跳过,字段){ var选项={reduce:false,limit:1

我有一个包含300k-400k文档的非常大的数据库,因此我必须使用
parseInt
定期(比如每周)将一些字段从
string
类型更新为
number
类型。我使用
typeof
操作符为其中一个字段创建了一个视图,并在视图中查询所有
string
键并更新这些文档

以下是我的视图的
映射
功能:

功能(doc){
如果(doc.xyz的类型!=“未定义”){
发出(doc.xyz的类型,空);
}
}
下面是我如何更新文档的:

函数更新属性(跳过,字段){
var选项={reduce:false,limit:1500,include_docs:true,key:“string”};
如果(跳过)
options.skip=跳过;
db.query('测试索引/'+字段+''类型',选项)
.然后(函数(结果){
console.log('>当前偏移量:'+result.offset);
result=result.rows.map(函数(一){
返回一个.doc;
});
如果(结果长度){
对于(变量i=0;i'+'更新的总记录数:'+totalDone));
updateProperties(totalDone,字段);
}).catch(函数(err){
删除错误数据;
log('为'+field+'更新bulkdocs时出错:'+JSON.stringify(err));
updateProperties(totalDone,字段);
});
})(第页,结果);
}
否则{
fieldsConverted++;
totalDone=0;
page=0;
if(fieldsConverted==convert.length){
console.log(“*************************************使用“+convert[fieldsConverted-1]+”********************”完成);
console.log('All done,Yay!');
返回true;
}
否则{
console.log(“*************************************使用“+convert[fieldsConverted-1]+”********************”完成);
updateProperties(null,convert[fieldsConverted]);
}
}
}).catch(函数(err){
log('大容量抓取时出错'+JSON.stringify(err));
});
}
当运行时,它给出以下输出:

>  Currently at offset: 0
Done uploading page 1 of xyz >Total Records updated: 1500
>  Currently at offset: 3000
^C
abc@TempMach:~/aire20$ node server/data/bulkUpdate.js
>  Currently at offset: 3000
Done uploading page 1 of xyz >Total Records updated: 1500
>  Currently at offset: 6000
Done uploading page 2 of xyz >Total Records updated: 3000
>  Currently at offset: 9000
现在你们可以看到,当我想跳过1500个文档时,我希望我的偏移量是1500,而不是更新后的3000。最后,如果说我有10个文档作为一个整体,它只更新其中的5个,并说全部完成并退出。我错过了什么