有没有办法把 mongo 集合转储为 json 格式?无论是在 shell 上还是使用 java 驱动程序。我正在寻找一个最好的性能。
Mongo 包括一个 mongoexport 实用程序 (见文件),它可以转储一个集合。该实用程序使用本机 libmongoclient,可能是最快的方法。
mongoexport -d <database> -c <collection_name>
同样有用的是:
-o: 将输出写入文件,否则使用标准输出(医生)
-o
--jsonArray: 生成一个有效的 json 文档,而不是每行一个 json 对象(医生)
--jsonArray
输出格式化的 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
警告 mongoimport和 mongoexport不能可靠地保留所有丰富的 BSON 数据类型,因为 JSON 只能表示 BSON 支持的类型的一个子集。因此,用这些工具导出或导入的数据可能会失去一定程度的保真度。
mongoimport
mongoexport
还有 http://bsonspec.org/
BSON 被设计成快速的编码和解码。例如, 整数存储为32(或64)位整数,所以它们不需要 解析到文本和从文本进行解析 但是解析起来要快得多。 除了紧凑性之外,BSON 还添加了其他数据类型 在 JSON 无法使用,特别是 BinData 和 Date 数据类型。
BSON 被设计成快速的编码和解码。例如, 整数存储为32(或64)位整数,所以它们不需要 解析到文本和从文本进行解析 但是解析起来要快得多。
除了紧凑性之外,BSON 还添加了其他数据类型 在 JSON 无法使用,特别是 BinData 和 Date 数据类型。
以下是我的命令,以供参考:
mongoexport --db AppDB --collection files --pretty --out output.json
在 Windows 7(MongoDB 3.4)上,必须将 cmd 移动到 mongod.exe和 mongo.exe文件所在的位置 = > 否则,如果它不识别 mongoexport命令,那么它就无法工作。
mongod.exe
mongo.exe
下面是我编写的一个小节点脚本,用于将特定数据库中的所有集合转储到指定的输出目录..。
#!/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);