利用MongoDB的updateMany方法与node-schedule,定时更新数据库

76 阅读1分钟

最近做了一个利用利用MongoDB的updateMany方法更新数据库,做一下记录

前提:

1.准备一个含有100条数据的数组对象,格式如下

const testArray = [
{address:"1234567"},
{address:"2345678"},
......
]

2.执行npm i node-schedule,下载自动更新依赖

一: 初始化数据库(更新100条)

const initDefaultData = async () => {
    const initData = [];
    for (var i = 0; i < 100; i++) {
        initData.push({address: initadress[i].address, initBoolean: false});
    }
    await db.initDoc.insertMany(initData);
}

二: 找到10条initBoolean为false的数据,此时的数据格式依旧为数组对象

const fountdata = db.initDoc.find({initBoolean:false}).limit(10)

//没有数据时,直接return,不往下执行三四五六步
if(fountdata === []){
    console.log("处理失败")
    return
}

三:将上一步的数据处理成纯数组

const ceshiarray = [];
fountdata.map(item=>{
    array.push(item.address)
})

此时,数据格式为["a","b",.....]

四:将第三步筛选出的数据与初始化的数据库进行对比,含有相同的address的,将initBoolean设置为true

db.initDoc.updateMany({address:{$in:ceshiarray}},{$set:{initBoolean:true}})

此时,数据库更新操作完成

五:将上述二三四步代码封装成一个函数

const ceshifunction = async()=>{
        。。。。。。
}

六: 引入node-schedule依赖

const schedule = require('node-schedule');

//每小时执行一次
const scheduleCronstyle = async () => {
    schedule.scheduleJob('0 * * * * ', () => {
        ceshifunction()
    })
}