MongoDB mongoexport 命令的使用及简单实现
文章目录
MongoDB 提供了 mongoexport 命令来导出数据,导出的数据是 json 格式的,当然也可以是 csv 格式。主要可以实现备份和恢复的功能。
具体的使用,我们使用 –help 查看,主要的参数有:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | -h [ --host ] arg 要连接的服务器,例如 127.0.0.1 或者 localhost --port arg 要连接服务器的端口,也可以使用 --host hostname:port -u [ --username ] arg 用户名 -p [ --password ] arg 密码 -d [ --db ] arg 使用的数据库(database)名称 -c [ --collection ] arg 使用的集合(collection) -o [ --out ] arg 导出的文件名 -f [ --fields ] arg 字段名称,使用逗号分隔,例如 -f name,age -q [ --query ] arg 查询过滤器 --csv 导出为 csv 格式 | 
例如,我们要导出 tests 数据库中的 users 集合,可以使用:
| 1
 | mongoexport -d tests -c users -o users.dat | 
现在,针对这几个简单的参数,我们自己使用 nodejs 来进行对 mongoexport 简单的实现,大概思路如下:
- 1. 使用 nodejs 的 mongodb 库 node-mongodb-native 来连接 MongoDB。
安装 mongodb:
| 1
 | npm install mongodb | 
连接 MongoDB 的主要代码:
| 1 2 3 4 5 | var mongoClient = new MongoClient(new Server('localhost', 27017));
mongoClient.open(function(err, mongoclient) {
}); | 
- 使用 process.argv 来接收输入的参数
 
- 使用 fs.writeFile 来输出 json 数据文件
 
具体实现如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | var fs = require('fs'),
    MongoClient = require('mongodb').MongoClient,
    Server = require('mongodb').Server,
    options = null;
    mongoClient = null;
if (process.argv.length <= 2 || process.argv.indexOf('--help') !== -1) {
    showHelp();
    return;
}
options = getOptions();
exportFile();
function showHelp() {
    console.error([
        'Export MongoDB data to JSON files.',
        '',
        'options:',
          ' --help                                produce help message',
          ' -h [ --host ] arg                     mongo host to connect to',
          ' --port arg                            server port',
          ' -u [ --username ] arg                 username',
          ' -p [ --password ] arg                 password',
          ' -d [ --db ] arg                       database to use',
          ' -c [ --collection ] arg               collection to use (some commands)',
          ' -o [ --out ] arg                      output file'
    ].join('\n'));
}
function getOptions() {
    var args = process.argv,
        options = {
            host: '127.0.0.1',
            port: 27017
        },
        keys = {
            '-h': 'host',
            '--host': 'host',
            '--port': 'port',
            '-u': 'username',
            '--username': 'username',
            '-p': 'password',
            '--password': 'password',
            '-d': 'db',
            '--db': 'db',
            '-c': 'collection',
            '--collection': 'collection',
            '-o': 'output',
            '--out': 'output'
        };
    for (var i = 2; i < args.length; i += 2) {
        if (keys.hasOwnProperty(args[i])) {
            options[keys[args[i]]] = args[i + 1];
        }
    }
    return options;
}
function exportFile() {
    mongoClient = new MongoClient(new Server(options.host, options.port, {native_parse: true}));
    mongoClient.open(function(err, mongoclient) {
        var db = mongoclient.db(options.db);
        db.collection(options.collection).find().toArray(function(err, results) {
            if (err) {
                console.log(err);
                return;
            }
            fs.writeFile(options.output, JSON.stringify(results), function(err) {
                if (err) {
                    console.log(err);
                    return;
                }
                console.log([
                    'connected to: ' + options.host,
                    'exported ' + results.length + ' records'
                ].join('\n'));
                mongoClient.close();
            });
        });
    });
} | 
如何使用:
| 1
 | node mongoexport.js -d tests -c users -o users.dat | 
文章作者 wenzhixin
上次更新 2013-06-12