我们正在尝试配置文件,我们已通过以下方式启用了配置文件:
> db.setProfilingLevel(0)
我们如何在system.profile
集合中导出数据?
发出后:
$ mongoexport --db test --collection system.profile --out export.json
我得到了:
2016-06-15T10:26:09.723+0200 error validating settings: collection name 'system.profile' is not allowed to begin with 'system.'
2016-06-15T10:26:09.723+0200 try 'mongoexport --help' for more information
无论如何可能吗?我确定我反对master
和mongod
实例,并且该集合存在且包含数据。
我发现了以下问题(版本2.6),但显然在3.2.1中没有用,所以我再问一遍: Exporting system.profile from MongoDB doesn't work。
版本中是否有变化?文档没有说明任何关于任何官方解决方法的限制。
答案 0 :(得分:2)
已分析的数据存储在系统数据库中,因此无法使用mongoexport。
创建包含内容的javaScript文件并另存为ex.js
profileData = db.system.profile.find();
while(profileData.hasNext()) {
printjson(profileData.next());
}
然后用:
运行你的mongomongo hostName / databaseName ex.js> data.json
答案 1 :(得分:1)
我发现问题有各种解决方案。我在这里总结所有这些,以便为其他人提供决策的可能性。顺便说一下。 mongoexport
的行为是3.2中的错误。
使用哪种方式取决于您最终想要的输出类型。我的意思是如果正确的JSON文件(严格)或“Mongo Shell JSON”或BSON。有关Mongo语言“扩展JSON”中JSON的详细信息,请参阅documentation。
通过“Mongo Shell JSON”我的意思是文件写在文件中,但整个文件不对应严格的JSON,它通常由Mongo工具生成/使用,如import,export。
<强>第一强>
输出BSON,然后输出“Mongo Shell JSON”
最简单的方法,就像Vish所提到的那样,使用mongodump
:
$ mongodump --host localhost:27017 --db test --collection system.profile
您可以选择使用--out [path]
CLI参数重定向转储的输出。然后,您将在{your out}/dump/test
子文件夹中获得BSON格式的转储,例如system.profile.bson
。仅提及dump
子文件夹的组织方式为{db}\{collection}.bson
。
要获取“Mongo Shell JSON”,您可以使用bsondump
实用程序:
$ cd dump/test
$ bsondump system.profile.bson > system.profile.json
没有办法说bsondump
以严格的JSON输出数据。在“Mongo Shell JSON”中生成JSON文件,文档只是一个接一个地打印出来。我的意思不是作为JSON数组。没有严格的JSON,您必须自己编写脚本以将“Mongo Shell JSON”表示法转换为严格的JSON表示法,甚至将记录与,
分开并将它们包装到[
和]
。
<强>第二强>
另一种方法是profesor79提到的方法,但有点修改后直接打印到JSON数组。它直接打印到“Mongo Shell JSON”。
use test;
c = db.system.profile.find().sort({ ts: 1 });
separator = '';
print("[");
while(c.hasNext()) {
print(separator);
printjson(c.next());
separator = ',';
}
print("]");
我在这里写这篇文章只是为了方便。如果您不需要使用profesor79回答的数组使用代码段。仍然需要编写一个脚本来转换为严格的JSON。
AFAIK没有办法如何直接获得严格的JSON。好消息是mongoimport
接受“Mongo Shell JSON”,即使official documentation说:
要保留类型信息,mongoexport和mongoimport对某些类型使用严格模式表示。
说明:我们的目标是拥有一个严格的JSON,我们有动力在其他地方处理数据。目前我们正在导出“Mongo Shell JSON”,然后通过bash脚本进行转换。