63

is there any easy way to change the database from mysql to mongoDB ?

or better any one suggest me good tutorial do it

4
  • Are you looking for a process to transfer your data, or a methodology change? Commented Jun 6, 2011 at 11:48
  • process to do it :)i already have around half million records Commented Jun 6, 2011 at 11:50
  • 1
    you need to think of the best way to store data from mysql into mongodb. And then write mapping on any languge by yourself Commented Jun 6, 2011 at 13:09
  • possible duplicate of MySQL export to MongoDB Commented May 9, 2012 at 11:57

13 Answers 13

58

is there any easy way to change the database from mysql to mongoDB ?

Method #1: export from MySQL in a CSV format and then use the mongoimport tool. However, this does not always work well in terms of handling dates of binary data.

Method #2: script the transfer in your language of choice. Basically you write a program that reads everything from MySQL one element at a time and then inserts it into MongoDB.

Method #2 is better than #1, but it is still not adequate.

MongoDB uses collections instead of tables. MongoDB does not support joins. In every database I've seen, this means that your data structure in MongoDB is different from the structure in MySQL.

Because of this, there is no "universal tool" for porting SQL to MongoDB. Your data will need to be transformed before it reaches MongoDB.

Sign up to request clarification or add additional context in comments.

4 Comments

Is it possible to Use ORM framework to map SQL data into Objects and collections and then store that data to MongoDB?...That will solve the problem of Joins
That's exactly what you should do but its definitely not "easy" in the way asked in the original question.
yeah, i need to convert my mysql database to mongoDB, i have more data's in my database. there is any nodejs script to convert database?
@GaneSH, did you get any node js script to convert database?
22

If you're using Ruby, you can also try: Mongify

It's a super simple way to transform your data from a RDBS to MongoDB without losing anything.

Mongify will read your mysql database, build a translation file for you and all you have to do is map how you want your data transformed.

It supports:

  • Auto updating IDs (to BSON ObjectID)
  • Updating referencing IDs
  • Type Casting values
  • Embedding tables into other documents
  • Before save filters (to allow changes to the data manually)
  • and much much more...

Read more about it at: http://mongify.com/getting_started.html

There is also a short 5 min video on the homepage that shows you how easy it is.

6 Comments

Hey Coded Container. In short, yes, it will work with MySQL, however it works using RUBY (the programming language). You need to have your system setup to run ruby before you can use Mongify.
Do you know how this could work if you wanted to get out of the WordPress MySQL environment and into a mongoDB/Angular stack?
Yes, it should be able to. However you will require Ruby to use Mongify. Once everything is moved over to MongoDB, you no longer need ruby.
But using mongify, you can't convert the date format in mysql to date format in mongo and also the binaries don't work, the binaries will be converted as strings. If the mysql stores 0 as binary, then the equivalent in mongo would be '\u0000'
@RKA, Mongify supports modifying the value to whatever you want it to be (as long as the mognodb driver supports it). Please read the docs
|
5

Here's what I did it with Node.js for this purpose:

var mysql = require('mysql');
var MongoClient = require('mongodb').MongoClient;

function getMysqlTables(mysqlConnection, callback) {
    mysqlConnection.query("show full tables where Table_Type = 'BASE TABLE';", function(error, results, fields) {
        if (error) {
            callback(error);
        } else {
            var tables = [];
            results.forEach(function (row) {
                for (var key in row) {
                    if (row.hasOwnProperty(key)) {
                        if(key.startsWith('Tables_in')) {
                            tables.push(row[key]);
                        }
                    }
                }
            });
            callback(null, tables);
        }
    });

}

function tableToCollection(mysqlConnection, tableName, mongoCollection, callback) {
    var sql = 'SELECT * FROM ' + tableName + ';';
    mysqlConnection.query(sql, function (error, results, fields) {
        if (error) {
            callback(error);
        } else {
            if (results.length > 0) {
                mongoCollection.insertMany(results, {}, function (error) {
                    if (error) {
                        callback(error);
                    } else {
                        callback(null);
                    }
                });
            } else {
                callback(null);
            }
        }
    });
}

MongoClient.connect("mongodb://localhost:27017/importedDb", function (error, db) {
    if (error) throw error;

    var MysqlCon = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: 'root',
        port: 8889,
        database: 'dbToExport'
    });

    MysqlCon.connect();

    var jobs = 0;

    getMysqlTables(MysqlCon, function(error, tables) {
        tables.forEach(function(table) {
            var collection = db.collection(table);
            ++jobs;
            tableToCollection(MysqlCon, table, collection, function(error) {
                if (error) throw error;
                --jobs;
            });
        })
    });

    // Waiting for all jobs to complete before closing databases connections.
    var interval = setInterval(function() {
        if(jobs<=0) {
            clearInterval(interval);
            console.log('done!');
            db.close();
            MysqlCon.end();
        }
    }, 300);
});

1 Comment

@benkadmin help me to sort out the problem is occur when i have use this code for convert my database i have 136 table in sql but if i run this file my desktop is not working able to convert 69 table after that desktop is not working and program is terminated.
4

MongoVUE's free version can do this automatically for you.

It can connect to both databases and perform the import

1 Comment

The link is broken.
4

I think one of the easiest ways is to export the MySQL database to JSON and then use mongorestore to import it to a MongoDB database.

Step 1: Export the MySQL database to JSON

Load the mysql dump file into a MySQL database if necessary

Open MySQL Workbench and connect to the MySQL database

Go to the Schema viewer > Select database > Tables > right-click on the name of the table to export

Select 'Table Data Export Wizard'

Set the file format to .json and type in a filename such as tablename.json

Note: All tables will need to be exported individually

Step 2: Import the JSON files to a MongoDB using the mongorestore command

The mongorestore command should be run from the server command line (not the mongo shell)

Note that you may need to provide the authentication details as well as the --jsonArray option, see the mongorestore docs for more information

mongoimport -d dbname -u ${MONGO_USERNAME} -p ${MONGO_PASSWORD} --authenticationDatabase admin -c collectionname --jsonArray --file tablename.json

Note: This method will not work if the original MySQL database has BLOBs/binary data.

Comments

1

I am kind of partial to TalendOpenStudio for those kind of migration jobs. It is an eclipse based solution to create data migration "scripts" in a visual way. I do not like visual programming, but this is a problem domain I make an exception.

Adrien Mogenet has create a MongoDBConnection plugin for mongodb.

It is probably overkill for a "simple" migration but ut is a cool tool.

Mind however, that the suggestion of Nix will probably save you time if it is a one-of migration.

Comments

1

You can use QCubed (http://qcu.be) framework for that. The procedure would be something like this:

  1. Install QCubed (http://www.thetrozone.com/qcubed-installation)
  2. Do the codegen on your database. (http://www.thetrozone.com/php-code-generation-qcubed-eliminating-sql-hassle)
  3. Take your database offline from the rest of the world so that only one operation runs at a time.
  4. Now write a script which will read all rows from all tables of the database and use the getJson on all objects to get the json. You can then use the data to convert to array and push it into the mongoDB!

Comments

1

If anyone's still looking for a solution, i found that the easiest way is to write a PHP script to connect to your SQL DB, retrieve the information you want using the usual Select statement, transform the information into JSON using the PHP JSON Encode functions and simply output your results to file or directly to MongoDB. It's actually pretty simple and straight forward, the only thing to do is to double check your output against a Json validator, you may have to use functions such as explode to replace certain characters and symbols to make it valid. I have done this before however i currently do not have the script at hand but from what i can remember it was literally half a page of code.

Oh also remember Mongo is a document store so some data mapping is required to get it to be acceptable with mongo.

Comments

1

For those coming to this with the same problem, you can check out this Github project. This is an ongoing development that will help you migrate data from MySQL database to MongoDB by simply running a simple command.

It will generate MongoDB Schemas in TypeScript so you can use them later in your project. Each MySQL table will be a MongoDB collection, and datatypes will be efficiently converted to their MongoDB compatibles.

The documentation for the same can be found in the project's README.md. Feel free to come in and contribute. Would like to help if need be.

Comments

0

If you are looking for a tool to do it for you, good luck.

My suggestion is to just pick your language of choice, and read from one and write to another.

1 Comment

i am using php as backend program.
0

If I could quote Matt Briggs (it solved my roblem one time):

The driver way is by FAR the most straight forward. The import/export tools are fantastic, but only if you are using them as a pair. You are in for a wild ride if your table includes dates and you try to export from the db and import into mongo.

You are lucky too, being in c#. We are using ruby, and have a 32million row table we migrated to mongo. Our ending solution was to craft an insane sql statement in postgres that output json (including some pretty kludgy things to get dates going properly) and piped the output of that query on the command line into mongoimport. It took an incredibly frustrating day to write, and is not the sort of thing that can ever really be changed.

So if you can get away with it, use ado.net with the mongo driver. If not, I wish you well :-)

(note that this is coming from a total mongo fanboi)

MySQL is very similar to other SQL databases, so I send You to the topić: Convert SQL table to mongoDB document

Comments

0

You can use the following project.It requires solr like configuration file to be written.Its very simple and straight forward.

http://code.google.com/p/sql-to-mongo-importer/

Comments

0

Try this: Automated conversion of MySQL dump to Mongo updates using simple r2n mappings. https://github.com/virtimus/mysql2mongo

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.