将 Mongo 集合转储为 JSON 格式

有没有办法把 mongo 集合转储为 json 格式?无论是在 shell 上还是使用 java 驱动程序。我正在寻找一个最好的性能。

148954 次浏览

Mongo 包括一个 mongoexport 实用程序 (见文件),它可以转储一个集合。该实用程序使用本机 libmongoclient,可能是最快的方法。

mongoexport -d <database> -c <collection_name>

同样有用的是:

-o: 将输出写入文件,否则使用标准输出(医生)

--jsonArray: 生成一个有效的 json 文档,而不是每行一个 json 对象(医生)

输出格式化的 json (医生)

来自 Mongo 文档:

Mongoexport 实用程序收集并导出到 JSON 或 CSV。您可以指定查询的筛选器或要输出的字段列表

阅读更多: http://www.mongodb.org/display/DOCS/mongoexport

使用 mongoexport/mongoimport 转储/恢复集合:

导出 JSON 文件 :

mongoexport --db <database-name> --collection <collection-name> --out output.json

导入 JSON 文件 :

mongoimport --db <database-name> --collection <collection-name> --file input.json

警告 mongoimportmongoexport不能可靠地保留所有丰富的 BSON 数据类型,因为 JSON 只能表示 BSON 支持的类型的一个子集。因此,用这些工具导出或导入的数据可能会失去一定程度的保真度。

还有 http://bsonspec.org/

BSON 被设计成快速的编码和解码。例如, 整数存储为32(或64)位整数,所以它们不需要 解析到文本和从文本进行解析 但是解析起来要快得多。

除了紧凑性之外,BSON 还添加了其他数据类型 在 JSON 无法使用,特别是 BinData 和 Date 数据类型。

以下是我的命令,以供参考:

mongoexport --db AppDB --collection files --pretty --out output.json

在 Windows 7(MongoDB 3.4)上,必须将 cmd 移动到 mongod.exemongo.exe文件所在的位置 = > 否则,如果它不识别 mongoexport命令,那么它就无法工作。

下面是我编写的一个小节点脚本,用于将特定数据库中的所有集合转储到指定的输出目录..。

#!/usr/bin/env node
import { MongoClient } from 'mongodb';
import { spawn } from 'child_process';
import fs from 'fs';


const DB_URI = 'mongodb://0.0.0.0:27017';
const DB_NAME = 'database-name';
const OUTPUT_DIR = 'output-directory';
const client = new MongoClient(DB_URI);


async function run() {
try {
await client.connect();


const db = client.db(DB_NAME);
const collections = await db.collections();


if (!fs.existsSync(OUTPUT_DIR)) {
fs.mkdirSync(OUTPUT_DIR);
}


collections.forEach(async (c) => {
const name = c.collectionName;
await spawn('mongoexport', [
'--db',
DB_NAME,
'--collection',
name,
'--jsonArray',
'--pretty',
`--out=./${OUTPUT_DIR}/${name}.json`,
]);
});
} finally {
await client.close();
console.log(`DB Data for ${DB_NAME} has been written to ./${OUTPUT_DIR}/`);
}
}
run().catch(console.dir);