mongodb 分页处理数据 怎么写脚本 进行分页呀 谢谢
怎么写脚本执行
脚本如下 :
db.getCollection('test').find({}).forEach( item =>{
if (item.widget.fieldId) {
var filed = db.getCollection('field').findOne({_id:item.widget.fieldId})
if(filed){
item.widget.fieldName = filed.name
}
db.getCollection('test').save(item)
}
})
谢谢
limit(2000) 每次执行2000条数据
skip(0) 从零条开始
db.getCollection('test').find({}).skip(0).limit(2000).forEach( item =>{
if (item.widget.fieldId) {
var filed = db.getCollection('field').findOne({_id:item.widget.fieldId})
if(filed){
item.widget.fieldName = filed.name
}
下一次就是:
db.getCollection('test').find({}).skip(2000).limit(2000)
但随着数量越大 skip执行效率越低 所以使用下面:
//5千到更多====
var data = db.getCollection('test').find().sort({"_id":1}).limit(5000);
var latest = null;
while (data.hasNext()){
latest = data.next()
}
//db.getCollection('test').find({"_id":{"$gt":latest._id}}).sort({"_id":1}).limit(1000)
db.getCollection('test').find({"_id":{"$gt":latest._id}}).sort({"_id":1}).limit(10000).forEach( item =>{
if (item.widget.fieldId) {
var filed = db.getCollection('fieldQuery').findOne({_id:item.widget.fieldId})
if(filed){
item.widget.fieldName = filed.name
}
db.getCollection('test').save(item)
}
})
//0 到5千内====
db.getCollection('test').find().sort({"_id":1}).limit(5000).forEach( item =>{
if (item.widget.fieldId) {
var filed = db.getCollection('fieldQuery').findOne({_id:item.widget.fieldId})
if(filed){
item.widget.fieldName = filed.name
}
db.getCollection('test').save(item)
}
})
skip take