簡體   English   中英

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

[英]How to backup a mongodb collection using express.js and Node.js

我想每個月備份我的userdatas集合。

備份意味着:

我需要userdatas數據並將其存儲在一些backupuserdatas集合。 每 1 個月,一個批處理程序應該自動運行,並且應該將該月的數據(文檔)存儲在backupuserdatas集合中。

我已經使用 node-cron 來運行批處理程序,但我不知道每個月都編寫一個查詢來備份我的userdatas集合。

如何在 Node.js、express.js 和 mongodb 中執行此操作?

您可以在userdatas表上運行 find 查詢,然后在其中使用插入查詢在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 表。

您可以使用以下模塊https://www.npmjs.com/package/mongodb-backup https://www.npmjs.com/package/mongodb-restore

您還可以使用選項進行備份和恢復特定集合

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM