如何使用Robomongo从MongoDB导出JSON


108

所以我对此并不了解MongoDB。我RoboMongo使用它连接到MongoDB。我需要做的是-该MongoDB中有一个集合。我想从该集合中导出数据,以便可以将其保存到文件中。

我使用该界面以文本形式打开集合中的数据,并做了一个Ctrl+ A并粘贴到文本文件中。但是,我发现并非所有数据都被复制,并且文本数据中有很多注释自然会破坏JSON。

我想知道RoboMongo是否有Export As JSON设施以便我可以进行干净出口。

任何指针表示赞赏!


您要导出特定的收藏集还是完整的数据库?
Ramesh Murugesan 2015年

1
这不是Robomongo的当前功能,但是我在github问题队列中添加了功能建议:Add JSON export。一般建议将导入/导出集成在一起,但是更详细/实际的用例会有所帮助。例如,这是否应支持从集合,查找查询,聚合管道中导出JSON?当前,最好的选择是使用标准mongoexport命令行工具。
Stennie 2015年

1
@Stennie-谢谢您的评论。我想回答您的问题-从客户体验的角度来看,这并不重要。在大多数其他数据库接口中,流程是您运行查询(使用或不使用critera),并获得一组结果。右键单击并说“导出结果为...”,因此此处同样适用。无论是导出整个集合还是查找查询都没有关系。如果结果可以显示在面板中,则它应该是可导出的。
不确定变量

1
您只需执行此操作mongoexport --uri='mongodb://someUser@mongodb0.example.com:27017/marketing' --collection=contacts --out=contacts.json
Naren

Answers:


63

您可以使用MongoDB Shell脚本tojson将每个记录转换为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")

对于大型结果集可能不是很有效,但是您可以限制查询。或者,您可以使用mongoexport


3
输出无效的json。只是json序列化记录一一记录
ruX

对于许多用例,可以使用它tojson(db.getCollection(...).find(...)["_batch"])来输出从服务器获得的当前批次的全部。
Yuval

@Yuval你的意思是真的["_batch"]吗?您能举个例子如何使用它吗?我使用Robo 3T 1.2.1进行了尝试,但是它只说“脚本执行成功,但是没有结果可显示”。
弗洛里安(Florian Winter)

7
@FlorianWinter那只是从摆弄的随机发现中得出的。更好的解决方案是tojson(db.getCollection(...).find(...).toArray())
尤瓦尔

@Yuval尼斯!那是最简单的解决方案,比我的要好得多。考虑将其发布为答案。(或者编辑我的,但是我会得到您应得的全部荣誉,这有点不公平……)
弗洛里安(Florian Winter

58

快速而肮脏的方法:只需输入查询内容,db.getCollection('collection').find({}).toArray()然后单击Copy JSON。将数据粘贴到您选择的编辑器中。

在此处输入图片说明


4
整齐!考虑到robo3t中缺少导出功能,这一点都不脏。与其他建议的解决方案相比,处理少量数据要容易得多。
Ilya Luzyanin

30

Robomongo的外壳功能将解决该问题。就我而言,我需要几列为CSV格式。

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

1
是否可以将此脚本的输出写入Robomongo shell的本地csv中?
xxxvincxxx

这使我“脚本执行成功,但没有结果可显示”
Shanika Ediriweera

错误:第10行:作业中的左侧无效
Eugen Sunic

19

有一些MongoDB GUI,其中一些内置了对数据导出的支持。您可以在http://mongodb-tools.com上找到MongoDB GUI的完整列表。

您询问的是有关导出查询结果的问题,而不是有关导出整个集合的问题。给3T MongoChef MongoDB的GUI一个尝试,这个工具对您的具体使用情况的支持。


Studio 3T完全比预期的要容易!:+1:
–vinyl

16

在电子表格中说“导出到文件”?喜欢.csv吗?

IMO,这是在Robo 3T(以前称为robomongo)中最简单的方法:

  1. Robo 3T GUI的右上角有一个“在文本模式下查看结果”按钮,单击它并复制所有内容

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

  3. 单击下载按钮,现在将其保存在电子表格中。

希望这对某人有帮助,因为我希望Robo 3T具有出口功能


很简单,谢谢你
静省午光

11

不要在shell上运行此命令,请在命令提示符下使用数据库名称,集合名称和文件名输入此脚本,所有这些都将替换占位符。

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

这个对我有用。



5

在扩展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);
}

4

如果要使用mongoimport,则需要通过以下方式导出:

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

2

使用robomongo shell脚本:

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

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

使用mongodb的export和import命令

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

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

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

有关导出的更多信息,请访问:https : //docs.mongodb.org/manual/reference/program/mongoexport/#cmdoption--jsonArray

导入此处:https : //docs.mongodb.org/manual/reference/program/mongoimport/#cmdoption--jsonArray


1

我遇到了同样的问题,并且在robomongo(Robo 3T 1.1.1)中运行脚本也不允许复制值,也没有导出选项。我可以实现此目的的最佳方法是使用mongoexport,如果mongodb安装在本地,则可以使用mongoexport连接到任何服务器上的数据库并提取数据

要连接到远程服务器上的数据和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:有助于提取所需的列,例如:fields.txt的内容可以是:

用户身份

仅提取“ userId”列的值

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

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

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

本地主机上的数据(mongodb应该在本地主机上运行)

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

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


1

解:

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

在此处输入图片说明

其中:
数据库->模拟服务器
集合名称-> api_defs
输出文件名-> childChoreRequest.json


1

弗洛里安·温特答案的扩展,适用于希望生成准备执行查询的人员。

dropinsertMany使用查询cursor

{
    // 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"
}
]);

0
  1. 进行搜索
  2. 按钮视图以JSON模式显示结果
  3. 将结果复制到单词
  4. 打印单词的结果

当我的文档中有日期时,它将返回无效的json格式的ISODate元素。
Constantino Cronemberger

1
为什么要使用Word文档存储数据库导出?为什么在世界上有人要打印数据库导出?
马斯克

@maesk🤣🤣🤣🤣
查理Schliesser
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.