如何使用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"
}
]);