132

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

我使用该界面将集合中的数据作为文本打开,然后执行Ctrl+A并粘贴到文本文件中。但是,我发现并非所有数据都被复制,而且文本数据中有很多注释自然会破坏 JSON。

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

任何指针表示赞赏!

4

15 回答 15

108

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

在此处输入图像描述

于 2018-08-22T07:39:28.563 回答
70

您可以在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.

于 2016-08-05T08:35:58.830 回答
36

Robomongo 的 shell 功能将解决这个问题。就我而言,我需要几列作为 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
于 2016-05-09T19:52:36.720 回答
23

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

IMO 这是在 Robo 3T(以前称为 robomongo)中执行此操作的最简单方法:

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

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

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

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

于 2018-02-28T22:35:02.227 回答
19

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

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

于 2015-02-26T20:34:03.500 回答
12

不要在 shell 上运行此命令,在命令提示符处输入此脚本,并使用您的数据库名称、集合名称和文件名,全部替换占位符。

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

这个对我有用。

于 2016-08-17T07:27:27.190 回答
8

我不认为 robomongo 有这样的功能。因此,您最好将 mongodb 函数用作特定 Collection 的 mongoexport。

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

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

mongodump / mongorestore
于 2015-02-26T03:19:44.820 回答
6

如果您想使用mongoimport,您需要以这种方式导出:

db.getCollection('tables')
  .find({_id: 'q3hrnnoKu2mnCL7kE'})
  .forEach(function(x){printjsononeline(x)});
于 2017-04-19T15:01:30.677 回答
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);
}
于 2016-05-27T12:37:37.460 回答
2

解决方案:

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

在此处输入图像描述

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

于 2018-12-04T19:08:06.660 回答
2

Florian Winter答案的扩展,适用于希望生成准备执行查询的人。

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"
}
]);
于 2020-03-06T07:08:43.633 回答
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的导出导入命令

您可以将--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

于 2015-12-07T14:24:55.467 回答
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

于 2017-12-07T00:34:51.627 回答
0

简单的解决方案:

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

注意: 其他解决方案很好,但当您的集合具有等类型时,可能会在导入过程中导致Date错误ObjectId...

快乐黑客:)

于 2021-08-10T08:15:22.487 回答
0
  1. 进行搜索
  2. JSON模式下的按钮视图结果
  3. 将结果复制到 word
  4. 从word打印结果
于 2019-10-01T06:29:21.900 回答