如何使用 Robo 3T 从 MongoDB 导出 JSON

我正在使用 Robo 3T (以前的 RoboMongo)连接到 MongoDB。我需要做的是: MongoDB 中有一个集合。我想从该集合中导出数据,以便将其保存到一个文件中。

我使用该接口将集合中的数据以文本形式打开,并执行 Ctrl + A操作并粘贴到文本文件中。但是,我发现并不是所有的数据都被复制,而且文本数据中有很多注释,这些注释自然会破坏 JSON。

我想知道机器人3T 是否有一个“导出为 JSON”工具,以便我可以做一个干净的导出。

感谢你的指点!

229434 次浏览

我不认为机器人有这样的特征。 因此,您最好使用 mongodb 函数作为特定 Collection 的 mongoexport。

Http://docs.mongodb.org/manual/reference/program/mongoexport/#export-in-json-format

但是如果您正在寻找备份解决方案,最好使用

mongodump / mongorestore

有一些 MongoDB 图形用户界面,其中一些内置支持数据导出。在 http://mongodb-tools.com中可以找到 MongoDB GUI 的综合列表

您询问的是导出查询结果,而不是导出整个集合。尝试一下 3T MongoChef MongoDB GUI,这个工具支持您的特定用例。

使用 robomongo shell 脚本:

//on the same db
var cursor = db.collectionname.find();


while (cursor.hasNext()) {
var record = cursor.next();
db.new_collectionname.save(record);
}

使用 mongodb 的导出和导入命令

您可以将 --jsonArray参数/标志添加到 mongoexport命令中,这会将结果导出为单个 json 数组。

然后在导入时再次指定 --jsonArray标志。

或者删除文件中的起始和结束数组括号[] ,然后修改和导出的文件将使用没有 --jsonArray标志的 mongoimport命令导入。

有关出口的详情,请浏览这里: https://docs.mongodb.org/manual/reference/program/mongoexport/#cmdoption--jsonArray

输入: Https://docs.mongodb.org/manual/reference/program/mongoimport/#cmdoption——jsonarray

Robomongo 的 shell 功能将解决这个问题。

var cursor = db.getCollection('Member_details').find({Category: 'CUST'},{CustomerId :1,Name :1,_id:0})


while (cursor.hasNext()) {
var record = cursor.next();
print(record.CustomerID + "," + record.Name)
}


Output : -------


334, Harison
433, Rechard
453, Michel
533, Pal

在 Anish 的回答的基础上,我想要一些可以应用于任何查询的东西来自动输出所有字段,而不必在 print 语句中定义它们。它也许可以简化,但这是一个快速和肮脏的工作伟大的东西:

var cursor = db.getCollection('foo').find({}, {bar: 1, baz: 1, created_at: 1, updated_at: 1}).sort({created_at: -1, updated_at: -1});


while (cursor.hasNext()) {
var record = cursor.next();
var output = "";
for (var i in record) {
output += record[i] + ",";
};
output = output.substring(0, output.length - 1);
print(output);
}

可以使用 tojsonMongoDB shell 脚本中的每条记录转换为 JSON。

在 RoboMongo 中运行这个脚本:

var cursor = db.getCollection('foo').find({}, {});
while(cursor.hasNext()) {
print(tojson(cursor.next()))
}

这会将所有结果打印为一个类似 JSON 的数组。

结果不是真正的 JSON!有些类型,例如日期和对象 ID,被打印为 JavaScript 函数调用,例如 ISODate("2016-03-03T12:15:49.996Z")

对于大型结果集可能效率不高,但是您可以限制查询。

不要在 shell 上运行这个命令,在命令提示符下输入这个脚本,其中包含数据库名称、集合名称和文件名,所有这些都替换了占位符。.

mongoexport --db (Database name) --collection (Collection Name) --out (File name).json

对我有用。

如果你想使用 蒙古进口货,你可以这样导出:

db.getCollection('tables')
.find({_id: 'q3hrnnoKu2mnCL7kE'})
.forEach(function(x){printjsononeline(x)});

我也遇到过同样的问题,在 robomongo (Robo 3T 1.1.1)中运行脚本也不允许复制值,而且也没有导出选项。 我能做到这一点的最好方法是使用 mongoexport,如果 mongoexport 安装在您的本地,您可以使用 mongoexport 连接到任何服务器上的数据库并提取数据

要连接到远程服务器上的 Data 和 csv 输出文件,请在命令行中运行以下 mongoexport

mongoexport --host HOSTNAME --port PORT --username USERNAME --password "PASSWORD" --collection COLLECTION_NAME --db DATABASE_NAME --out OUTPUTFILE.csv --type=csv --fieldFile fields.txt

FieldFile: 帮助提取所需的列,例如: Txt 的内容可以是:

UserId

只提取列‘ userId’的值

远程服务器上的数据,json 输出文件:

mongoexport --host HOST_NAME --port PORT --username USERNAME --password "PASSWORD" --collection COLECTION_NAME --db DATABASE_NAME --out OUTPUT.json

这会将所有字段提取到 json 文件中

Localhost 上的数据(mongodb 应该在 localhost 上运行)

mongoexport --db DATABASE_NAME --collection COLLECTION --out OUTPUT.json

参考资料: https://docs.mongodb.com/manual/reference/program/mongoexport/#use

你说“导出到文件”是指电子表格吗? 就像是. csv?

国际海事组织这是在 Robo 做到这一点的最简单的方法3 t (前身是 roBomongo) :

  1. 在机器人3T 图形用户界面的右上角有一个“查看文本结果” 点击“模式”按钮,复制所有文件

  2. 将所有内容粘贴到这个网站: https://json-csv.com/

  3. 点击下载按钮,现在你有了一个电子表格。

希望这对某些人有帮助,因为我希望机器人3T 有出口能力

一个快速和肮脏的方法: 只写你的查询作为 db.getCollection('collection').find({}).toArray()和右键单击 Copy JSON。将数据粘贴到您选择的编辑器中。

enter image description here

解决方案:

mongoexport --db test --collection traffic --out traffic.json<br><br>

enter image description here

地点:
数据库-> 模拟服务器
集合名称-> api _ defs
输出文件名-> child ChoreRequest.json

  1. 去找吧
  2. 按钮视图的结果是 JSON 模式
  3. 把结果复制到文字上
  4. 从单词中打印结果

Florian Winter的一个扩展,用于查找生成准备执行查询的人员。

使用 cursordropinsertMany查询:

{
// collection name
var collection_name = 'foo';


// query
var cursor = db.getCollection(collection_name).find({});


// drop collection and insert script
print('db.' + collection_name + '.drop();');
print('db.' + collection_name + '.insertMany([');


// print documents
while(cursor.hasNext()) {
print(tojson(cursor.next()));


if (cursor.hasNext()) // add trailing "," if not last item
print(',');
}


// end script
print(']);');
}

其产出将类似于:

db.foo.drop();
db.foo.insertMany([
{
"_id" : ObjectId("abc"),
"name" : "foo"
}
,
{
"_id" : ObjectId("xyz"),
"name" : "bar"
}
]);

简单的解决办法:

tostrictjson(db.getCollection(collection_name).find({}))

注: 其他的解决方案也可以,但是当您的集合具有 DateObjectId等类型时,可能会在导入过程中导致错误。

快乐黑客:)

我使用 Mongodb Compass 导出,您可以导出到 csv 或 json。 在 Mongo Compass 的菜单上选择 Collection-> export Collection,您可以选择要导出的字段和要导出结果的文件,以前您可以指定查询。

问候