我想每个月备份一次userdatas
收藏。
备份意味着:
我需要获取userdatas
数据并将其存储在一些backupuserdatas
集合中。每1个月批处理程序应自动运行,并应将该月份的数据(文档)存储在backupuserdatas
集合中。
我已经使用node-cron来运行批处理程序,但我不知道每个月都会编写一个查询来备份我的userdatas
集合。
我怎么能在Node.js,express.js和mongodb中做到这一点?
答案 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
您还可以使用选项备份并还原特定集合