如何使用Robomongo从MongoDB导出JSON

如何使用Robomongo从MongoDB导出JSON,mongodb,robo3t,Mongodb,Robo3t,所以我对MongoDB了解不多。我有RoboMongo,我用它连接到MongoDB。我需要做的是——MongoDB中有一个集合。我想从该集合中导出数据,以便将其保存到文件中 我使用该界面以文本形式打开集合中的数据,并按Ctrl+a组合键将其粘贴到文本文件中。然而,我发现并不是所有的数据都被复制,而且文本数据中有很多注释,这自然会破坏JSON 我想知道RoboMongo是否有一个导出为JSON的功能,以便我可以进行干净的导出 任何指点都很感激 我认为机器人没有这样的特征。 所以最好使用mongod

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

我使用该界面以文本形式打开集合中的数据,并按Ctrl+a组合键将其粘贴到文本文件中。然而,我发现并不是所有的数据都被复制,而且文本数据中有很多注释,这自然会破坏JSON

我想知道RoboMongo是否有一个导出为JSON的
功能,以便我可以进行干净的导出


任何指点都很感激

我认为机器人没有这样的特征。 所以最好使用mongodb函数作为特定集合的mongoexport

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

mongodump / mongorestore

有一些MongoDB GUI,其中一些具有内置的数据导出支持。您可以在以下位置找到MongoDB GUI的全面列表:

您询问的是导出查询结果,而不是导出整个集合。试试看,此工具支持您的特定用例。

使用robomongo shell脚本: 使用mongodb的导出和导入命令 您可以将
--jsonArray
参数/标志添加到
mongoexport
命令中,这会将结果导出为单个json数组

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

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

更多关于出口的信息,请点击此处:

在此处导入:
机器人的外壳功能将解决这个问题。在我的例子中,我需要两列作为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

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

您可以使用
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”)


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

不要在shell上运行此命令,请在命令提示符下输入此脚本,并输入数据库名、集合名和文件名,所有内容都将替换占位符

mongoexport --db (Database name) --collection (Collection Name) --out (File name).json
它适合我。

如果要使用,请通过以下方式导出:

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

我也有同样的问题,在robomongo(Robo3T1.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的内容可以是:

用户ID

仅提取列“userId”的值

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

mongoexport --host HOST_NAME --port PORT --username USERNAME --password "PASSWORD" --collection COLECTION_NAME --db DATABASE_NAME --out OUTPUT.json
这会将所有字段提取到json文件中

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

参考资料:

您说的是电子表格中的“导出到文件”吗?想要一个.csv吗

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

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

  • 将所有内容粘贴到此网站:

  • 单击下载按钮,现在您可以在电子表格中找到它


  • 希望这能帮助一些人,因为我希望Robo 3T有导出功能,这是一种快速而肮脏的方式:只需将查询写成
    db.getCollection('collection')。查找({}).toArray()
    ,然后右键单击
    复制JSON
    。将数据粘贴到您选择的编辑器中

    解决方案:

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

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

  • 进行搜索
  • 按钮视图以JSON模式显示结果
  • 将测试结果复制到word
  • 从word打印结果
  • 为希望生成可执行查询的人员提供的一个扩展

    drop
    insertMany
    使用
    光标进行查询

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

    您想导出特定集合或完整数据库?这不是Robomongo当前的功能,但我在github问题队列中添加了一个功能建议:。有一个普遍的建议,但是更详细/实际的用例会有所帮助。例如,这是否应该支持从集合、查找查询和聚合管道导出JSON?目前您最好的选择是使用标准的
    mongoexport
    命令行工具。@Stennie-谢谢您的评论。我想在回答你的问题时——从客户体验的角度来看,这并不重要。在大多数其他数据库接口中,流程是运行一个查询(带或不带critera),获得一组结果。右键单击并说“将结果导出为…”,因此同样的内容也适用于此处。无论是导出整个集合还是查找查询。如果结果可以显示在面板中,那么它应该是可导出的mongodb://someUser@mongodb0.example.com:27
    {
        // 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"
    }
    ]);