如何使用express.js和Node.js备份mongodb集合

时间:2017-02-14 05:00:54

标签: javascript node.js mongodb express

我想每个月备份一次userdatas收藏。

备份意味着:

我需要获取userdatas数据并将其存储在一些backupuserdatas集合中。每1个月批处理程序应自动运行,并应将该月份的数据(文档)存储在backupuserdatas集合中。

我已经使用node-cron来运行批处理程序,但我不知道每个月都会编写一个查询来备份我的userdatas集合。

我怎么能在Node.js,express.js和mongodb中做到这一点?

3 个答案:

答案 0 :(得分:1)

mongodb 快照

https://github.com/lihaibh/mongodb-snapshot/tree/83b12d377a1ec387f0bcf121b294cdd45504ac76

安装

npm i mongodb-snapshot

添加这个功能

async function mongoSnap(path, restore = false) {
    const mongo_connector = new BKP.MongoDBDuplexConnector({
        connection: { uri: mongoCString, dbname: dbName }
    });
    const localfile_connector = new BKP.LocalFileSystemDuplexConnector({
        connection: { path: path }
    });
    const transferer = restore ? 
        new BKP.MongoTransferer({ source: localfile_connector, targets: [mongo_connector] }) : 
        new BKP.MongoTransferer({ source: mongo_connector, targets: [localfile_connector] }) ;
    for await (const { total, write } of transferer) { }
}

使用喜欢

await mongoSnap('./backups/collections.tar'); // backup

await mongoSnap('./backups/collections.tar', true); // restore

答案 1 :(得分:0)

您可以在 userdatas 表上运行查询查询,而不是在其中使用插入查询在 backupuserdatas 表中插入数据。

我知道这不是一个好的解决方案,但对于小数据,你可以使用它。

要在内部运行多个查询,您需要使用Async来同步节点的行为。希望这会帮助你。

您可以通过在node-cron部分中使用以下代码来执行此操作:

mongoose.users.find({}, function(err, result){
    var data = {};
    var curr_date = new Date();
    data["user_data"] = result;
    data["created"] = curr_date;
    var savebackup = new mongoose.backup_user(data);
    savebackup.save(function(err,res){
        // save done
        mongoose.users.remove({}, function(err, result){});
    });
});

这里我创建了一个名为“backup_user”的备份表,用户表是“users”。

每次运行node-cron api时,这都会将所有用户数据保存到backup_user表。

答案 2 :(得分:0)

您可以使用以下模块 Androidx Jetifier will handle it. https://www.npmjs.com/package/mongodb-backup

您还可以使用选项备份并还原特定集合