Skip to main content

Recover Recently Deleted documents

use recoverDoc;
for(i=0; i < 100; i++){db.col1.insert({_id : i})};
for(i=100; i < 200; i++){db.col1.insert({_id : i, name : "some_x_name"})};

> db.col1.remove({ "name" : "some_x_name"})
WriteResult({ "nRemoved" : 100 })
use local;
db.oplog.rs.find({op : "i", ns : "recoverDoc.col1", "o.name" : "some_x_name"}).count();100
db.oplog.rs.find({op : "i", ns : "recoverDoc.col1", "o.name" : "some_x_name"}, {"o" : 1});{ "o" : { "_id" : 100, "name" : "some_x_name" } }
{ "o" : { "_id" : 101, "name" : "some_x_name" } }
{ "o" : { "_id" : 102, "name" : "some_x_name" } }
{ "o" : { "_id" : 103, "name" : "some_x_name" } }
{ "o" : { "_id" : 104, "name" : "some_x_name" } }
var deletedDocs = db.oplog.rs.find({op : "i", ns : "recoverDoc.col1", "o.name" : "some_x_name"}, {"o" : 1}).toArray();
> deletedDocs.length
100
use recoverDoc;
db.col1.count();
100
// simple for loop to re-insert the relevant elements
for (var i = 0; i < deletedDocs.length; i++) {
    db.col1.insert({_id : deletedDocs[i].o._id, name : deletedDocs[i].o.name});
}
// check total and name counts again
db.col1.count();
200recoverDoc.col1
db.col1.count({name : "some_x_name"})
100


Comments

Popular posts from this blog

Mongod log is growing too large.

We have log append true in config file. Every day log is appended to the single log file. We are facing issue in space and we were also not able to purge the log file completely. So we need logs file for every day, if we have space issue then we can remove the old logs. Only thing we need to do is: In config file make sure we have: logappend = true Then login to mongo shell, run the below command against the admin database. use admin db.runCommand({logRotate:1})