Login or Sign Up to become a member!
LessThanDot Sit Logo

LessThanDot

Data Management

Less Than Dot is a community of passionate IT professionals and enthusiasts dedicated to sharing technical knowledge, experience, and assistance. Inside you will find reference materials, interesting technical discussions, and expert tips and commentary. Once you register for an account you will have immediate access to the forums and all past articles and commentaries.

LTD Social Sitings

Lessthandot twitter Lessthandot Linkedin Lessthandot friendfeed Lessthandot facebook Lessthandot rss

Note: Watch for social icons on posts by your favorite authors to follow their postings on these and other social sites.

Your profile

    Search

    XML Feeds

    Google Ads

    « Umm....No...that is not how you export a table into a file with SQL ServerSSRS Properties - Columns »
    comments

    In yesterday's post MongoDB: How to backup and restore databases we looked at how to backup and restore a database, today we are going to look at how to restore a collection from a backup. Be aware that mongorestore and mongodump have to be executed from a command window in the bin directory where mongodb is. To execute the MongoDB commands you need to connect to mongodb first. On my PC this is in the directory C:\NoSQL\mongodb\bin>

    In order to get started create a new database, name it MultiCollection

    You can just run this command, it will switch to the MultiCollection database if it exists or otherwise it will create the MultiCollection database

    use MultiCollection

    Now add these two collections

    db.Blog.insert( { name : "Denis",  age : 20 } )
    db.Blog.insert( { name : "Abe",    age : 30 } )
    db.Blog.insert( { name : "John",   age : 40 } )
    db.Blog.insert( { name : "Xavier", age : 10 } )
    db.Blog.insert( { name : "Zen",    age : 50 } )
    
    
    db.People.insert( { name : "AADenis",  age : 0020 } )
    db.People.insert( { name : "AAAbe",    age : 0030 } )
    db.People.insert( { name : "AAJohn",   age : 0040 } )
    db.People.insert( { name : "AAXavier", age : 0010 } )
    db.People.insert( { name : "AAZen",    age : 0050 } )

    Open a new command window, navigate to your mongodb bin directory. Now execute the mongodump --db MultiCollection command
    This command will backup the database into the dump directory, if this directory does not exist it will be created, in my case it will be located here C:\NoSQL\mongodb\bin\dump. In the dump directory you will see a directory with the same name as the database that you are backing up

    mongodump --db MultiCollection

    Here is the output

    connected to: 127.0.0.1
    Thu Jan 31 16:16:52 DATABASE: MultiCollection    to     dump/MultiCollection
    Thu Jan 31 16:16:52     MultiCollection.Blog to dump/MultiCollection/Blog.bson
    Thu Jan 31 16:16:52              5 objects
    Thu Jan 31 16:16:52     Metadata for MultiCollection.Blog to dump/MultiCollection/Blog.metadata.json
    Thu Jan 31 16:16:52     MultiCollection.People to dump/MultiCollection/People.bson
    Thu Jan 31 16:16:52              5 objects
    Thu Jan 31 16:16:52 Metadata for MultiCollection.People to dump/MultiCollection/People.metadata.json
    
    C:\NoSQL\mongodb\bin>

    Now let's add one more item to the People collection

    db.People.insert( { name : "ZZZZZZ",  age : 9999 } )

    Time to do the restore

    mongorestore dump/MultiCollection

    Here is the output

    connected to: 127.0.0.1
    Thu Jan 31 16:20:52 dump/MultiCollection/Blog.bson
    Thu Jan 31 16:20:52     going into namespace [MultiCollection.Blog]
    Thu Jan 31 16:20:52 warning: Restoring to MultiCollection.Blog without dropping. Restored data will be inserted
    raising errors; check your server log
    5 objects found
    Thu Jan 31 16:20:52     Creating index: { key: { _id: 1 }, ns: "MultiCollection.Blog", name: "_id_" }
    Thu Jan 31 16:20:52 dump/MultiCollection/People.bson
    Thu Jan 31 16:20:52     going into namespace [MultiCollection.People]
    5 objects found
    Thu Jan 31 16:20:52     Creating index: { key: { _id: 1 }, ns: "MultiCollection.People", name: "_id_" }

    Let's take a look at what we have
    We should have 5 items since we did a backup before we added item 6, we restored that backup

    db.People.find()

    Output is here

    { "_id" : ObjectId("510adec2d9a67956d3f4a44b"), "name" : "AADenis", "age" : 16 }
    { "_id" : ObjectId("510adec2d9a67956d3f4a44c"), "name" : "AAAbe", "age" : 24 }
    { "_id" : ObjectId("510adec2d9a67956d3f4a44d"), "name" : "AAJohn", "age" : 32 }
    { "_id" : ObjectId("510adec2d9a67956d3f4a44e"), "name" : "AAXavier", "age" : 8 }
    { "_id" : ObjectId("510adec5d9a67956d3f4a44f"), "name" : "AAZen", "age" : 40 }
    { "_id" : ObjectId("510ae0b8d9a67956d3f4a451"), "name" : "ZZZZZZ", "age" : 9999 }

    Something is not right, we still have 6 items. If you look back at the restore output, you will see the following warning

    warning: Restoring to MultiCollection.Blog without dropping. Restored data will be inserted
    raising errors; check your server log

    What we have to do is drop the collections first, you do that by specifying --drop

    Let's do the restore again but now with the --drop option

    mongorestore dump/MultiCollection --drop

    Here is the output

    connected to: 127.0.0.1
    Thu Jan 31 16:25:26 dump/MultiCollection/Blog.bson
    Thu Jan 31 16:25:26     going into namespace [MultiCollection.Blog]
    Thu Jan 31 16:25:26      dropping
    5 objects found
    Thu Jan 31 16:25:26     Creating index: { key: { _id: 1 }, ns: "MultiCollection.Blog", name: "_id_" }
    Thu Jan 31 16:25:26 dump/MultiCollection/People.bson
    Thu Jan 31 16:25:26     going into namespace [MultiCollection.People]
    Thu Jan 31 16:25:26      dropping
    5 objects found
    Thu Jan 31 16:25:26     Creating index: { key: { _id: 1 }, ns: "MultiCollection.People", name: "_id_" }
    db.People.find()

    Here are the results

    { "_id" : ObjectId("510adec2d9a67956d3f4a44b"), "name" : "AADenis", "age" : 16 }
    { "_id" : ObjectId("510adec2d9a67956d3f4a44c"), "name" : "AAAbe", "age" : 24 }
    { "_id" : ObjectId("510adec2d9a67956d3f4a44d"), "name" : "AAJohn", "age" : 32 }
    { "_id" : ObjectId("510adec2d9a67956d3f4a44e"), "name" : "AAXavier", "age" : 8 }
    { "_id" : ObjectId("510adec5d9a67956d3f4a44f"), "name" : "AAZen", "age" : 40 }

    As you can see we have 5 items now

    Let's insert the same item again

    db.People.insert( { name : "ZZZZZZ",  age : 9999 } )

    Let's also drop the Blog collection

    db.Blog.drop()

    Now if you do a find nothing is there

    db.Blog.find()

    In order to restore a collection, you need to use the --collection option and give the collection name, you also need to specify where the backup file is. In our case it is dump/Multicollection/Blog.bson. You will also see that information from the dump output

    MultiCollection.Blog to dump/MultiCollection/Blog.bson

    Run the following

    mongorestore --db MultiCollection --collection Blog dump/Multicollection/Blog.bson

    Here is the output

    connected to: 127.0.0.1
    Thu Jan 31 17:01:28 dump/Multicollection/Blog.bson
    Thu Jan 31 17:01:28     going into namespace [MultiCollection.Blog]
    5 objects found
    Thu Jan 31 17:01:28     Creating index: { key: { _id: 1 }, ns: "MultiCollection.Blog", name: "_id_" }

    Since we already dropped the collection manually we didn't have to add the drop option. Let's see what we have in the database now, People should have 6 items and Blog should have 5 items

    db.Blog.find()
    { "_id" : ObjectId("510adec1d9a67956d3f4a446"), "name" : "Denis", "age" : 20 }
    { "_id" : ObjectId("510adec1d9a67956d3f4a447"), "name" : "Abe", "age" : 30 }
    { "_id" : ObjectId("510adec2d9a67956d3f4a448"), "name" : "John", "age" : 40 }
    { "_id" : ObjectId("510adec2d9a67956d3f4a449"), "name" : "Xavier", "age" : 10 }
    { "_id" : ObjectId("510adec2d9a67956d3f4a44a"), "name" : "Zen", "age" : 50 }
    
    db.People.find()
    { "_id" : ObjectId("510adec2d9a67956d3f4a44b"), "name" : "AADenis", "age" : 16 }
    { "_id" : ObjectId("510adec2d9a67956d3f4a44c"), "name" : "AAAbe", "age" : 24 }
    { "_id" : ObjectId("510adec2d9a67956d3f4a44d"), "name" : "AAJohn", "age" : 32 }
    { "_id" : ObjectId("510adec2d9a67956d3f4a44e"), "name" : "AAXavier", "age" : 8 }
    { "_id" : ObjectId("510adec5d9a67956d3f4a44f"), "name" : "AAZen", "age" : 40 }
    { "_id" : ObjectId("510ae75cd9a67956d3f4a453"), "name" : "ZZZZZZ", "age" : 9999 }

    As you can see the People collection did not get overwritten and the Blog collection got restored

    That is all for this post, if you are interested in my other MongoDB posts, you can find them here:
    Install MongoDB as a Windows Service
    UPSERTs with MongoDB
    How to sort results in MongoDB
    Indexes in MongoDB: A quick overview
    Multidocument updates with MongoDB
    MongoDB: How to include and exclude the fields you want in results
    MongoDB: How to limit results and how to page through results
    MongoDB: How to backup and restore databases

    About the Author

    User bio imageDenis has been working with SQL Server since version 6.5. Although he worked as an ASP/JSP/ColdFusion developer before the dot com bust, he has been working exclusively as a database developer/architect since 2002. In addition to English, Denis is also fluent in Croatian and Dutch, but he can curse in many other languages and dialects (just ask the SQL optimizer) He lives in Princeton, NJ with his wife and three kids.
    Social SitingsTwitterFacebookLinkedInHomePageFlickrLTD RSS Feed
    1376 views
    InstapaperVote on HN

    No feedback yet

    Leave a comment


    Your email address will not be revealed on this site.

    To mislead the spambots.

    Your URL will be displayed.
    (Line breaks become <br />)
    (Name, email & website)
    (Allow users to contact you through a message form (your email will not be revealed.)