mongodb通过ObjectId按照时间筛选备份数据库

作者:袖梨 2022-06-29

要完成上述引言里的需求,我们这里从mongo的ObjectId入手,我们知道ObjectId的前四个字节是时间戳,那么我们可以在mongodump -q 来筛选记录。如果你不了解mongo ObjectId的构造请参看《_id和ObjectId》。

首先我们的使用场景是输入一个时间格式,然后返回该时间的最小ObjectId值,然后只要
在MongoDB shell中运行:

function objectIdWithTimestamp(timestamp) {
   // Convert string date to Date object (otherwise assume timestamp is a date)
   if (typeof(timestamp) == 'string') {
        timestamp = new Date(timestamp);
   }
   // Convert date object to hex seconds since Unix epoch
   var hexSeconds = Math.floor(timestamp/1000).toString(16);
   // Create an ObjectId with that hex timestamp
   var constructedObjectId = ObjectId(hexSeconds + "0000000000000000");
   return constructedObjectId
}

然后调用上面定义的函数:

 db.collectionName.find({ _id: { $lt: objectIdWithTimestamp('2015/10/01') } })

注:上面collectionName替换成你需查询的collection名字。

mongodump命令脚本语法如下:

>mongodump -h dbhost -d dbname -o dbdirectory-h:

MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

-d:
需要备份的数据库实例,例如:test

-o:

备份的数据存放位置,例如:c:datadump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

mongodump的例子:

$MONGO_HOME/bin/mongodump  --port 37218 -d dbname  -q '{"_id":{$gte:ObjectId("56742d800000000000000000")}}' -o ~/backup

注:上面ObjectId(“56742d800000000000000000”)可再上面mongo shell 调用objectIdWithTimestamp函数获得


MongoDB数据恢复

mongodb使用 mongorerstore 命令来恢复备份的数据。

语法
mongorestore命令脚本语法如下:

>mongorestore -h dbhost -d dbname --directoryperdb dbdirectory-h:

MongoDB所在服务器地址

-d:
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

--directoryperdb:
备份数据所在位置,例如:c:datadumptest,这里为什么要多加一个test,而不是备份时候的dump,读者自己查看提示吧!

--drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

接下来我们执行以下命令:

>mongorestore

相关文章

精彩推荐