我正在使用 Robo 3T (以前的 RoboMongo)连接到 MongoDB。我需要做的是: MongoDB 中有一个集合。我想从该集合中导出数据,以便将其保存到一个文件中。
我使用该接口将集合中的数据以文本形式打开,并执行 Ctrl + A操作并粘贴到文本文件中。但是,我发现并不是所有的数据都被复制,而且文本数据中有很多注释,这些注释自然会破坏 JSON。
我想知道机器人3T 是否有一个“导出为 JSON”工具,以便我可以做一个干净的导出。
感谢你的指点!
我不认为机器人有这样的特征。 因此,您最好使用 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,这个工具支持您的特定用例。
//on the same db var cursor = db.collectionname.find(); while (cursor.hasNext()) { var record = cursor.next(); db.new_collectionname.save(record); }
您可以将 --jsonArray参数/标志添加到 mongoexport命令中,这会将结果导出为单个 json 数组。
--jsonArray
mongoexport
然后在导入时再次指定 --jsonArray标志。
或者删除文件中的起始和结束数组括号[] ,然后修改和导出的文件将使用没有 --jsonArray标志的 mongoimport命令导入。
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); }
可以使用 tojson将 MongoDB shell 脚本中的每条记录转换为 JSON。
tojson
在 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")。
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) :
在机器人3T 图形用户界面的右上角有一个“查看文本结果” 点击“模式”按钮,复制所有文件
将所有内容粘贴到这个网站: https://json-csv.com/
点击下载按钮,现在你有了一个电子表格。
希望这对某些人有帮助,因为我希望机器人3T 有出口能力
一个快速和肮脏的方法: 只写你的查询作为 db.getCollection('collection').find({}).toArray()和右键单击 Copy JSON。将数据粘贴到您选择的编辑器中。
db.getCollection('collection').find({}).toArray()
Copy JSON
解决方案:
mongoexport --db test --collection traffic --out traffic.json<br><br>
地点: 数据库-> 模拟服务器 集合名称-> api _ defs 输出文件名-> child ChoreRequest.json
Florian Winter的一个扩展,用于查找生成准备执行查询的人员。
使用 cursor的 drop和 insertMany查询:
cursor
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" } ]);
简单的解决办法:
tostrictjson(db.getCollection(collection_name).find({}))
注: 其他的解决方案也可以,但是当您的集合具有 Date、 ObjectId等类型时,可能会在导入过程中导致错误。
Date
ObjectId
快乐黑客:)
我使用 Mongodb Compass 导出,您可以导出到 csv 或 json。 在 Mongo Compass 的菜单上选择 Collection-> export Collection,您可以选择要导出的字段和要导出结果的文件,以前您可以指定查询。
问候