用游标遍历一个mongo表,进行更新操作。
同时用一个数量表记录更新完成的数量,每更新完一条万条,就更新一次数量表。
问题出现在数量表的更新操作上,updateOne不加.then的时候就不更新数据,加上了才更新。按理说promise建立了就会执行啊,这里不知道什么原因。
代码如下:
model = mongoose.model(...)
num_model = mongoose.model(...)
model.find().skip(num).cursor().
on('data', function (doc) {
doc = JSON.parse(JSON.stringify(doc));
let _id = doc._id,
capital_final = clear(doc.capital),
capitalactl_final = clear(doc.capitalactl);
model.updateOne({
_id
}, {
capital: capital_final,
capitalactl: capitalactl_final
}).then(res => {
num_now++;
if (num_now > num + 10000) {
num += 10000
num_model.updateOne({
id: 1
}, {
num: num
})
//没有下面的代码就不进行更新操作
.then(res => {
console.log(res);
}).catch(err => {
console.log(err);
})
//没有上面的代码就不进行更新操作
}
})
})
//数据处理
function clear(){...}
https://mongoosejs.com/docs/a...

updateOne返回的是一个Query对象
then是Query对象的then不是Promise的then,then之后的才是promise
https://mongoosejs.com/docs/4...
是mongoose3/4吗?我去看了看文档确实是楼上说的那样,并不是es6标准的promise