如何从`system.profile`集合导出

时间:2016-06-15 08:41:23

标签: mongodb

我们正在尝试配置文件,我们已通过以下方式启用了配置文件:

> 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

无论如何可能吗?我确定我反对mastermongod实例,并且该集合存在且包含数据。

我发现了以下问题(版本2.6),但显然在3.2.1中没有用,所以我再问一遍: Exporting system.profile from MongoDB doesn't work

版本中是否有变化?文档没有说明任何关于任何官方解决方法的限制。

2 个答案:

答案 0 :(得分:2)

已分析的数据存储在系统数据库中,因此无法使用mongoexport。

创建包含内容的javaScript文件并另存为ex.js

profileData = db.system.profile.find();
while(profileData.hasNext()) {
  printjson(profileData.next());
}

然后用:

运行你的mongo
  

mongo 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脚本进行转换。