如何从 Mongo 数据库 collection 中提取特定字段
How to extract specific fields from Mongo DB collection
我的 mongo collection 中有 2250 条记录。
下面是 collection -
中的一条记录
"_id" : bjectId("57e57e3fb04c6373f7000002"),
"message" : "<logentry revision='15234'><author>447085</author><date>2016-07-19T12:39:19.707782Z</date><paths><path prop-mods='false' text-mods='true' kind='file' action='M'>/itdp/branches/itdpux/branches/base/itdp2.0/src/com/cts/race/beans/ProgramChronicleBean.java</path></paths><msg>day week month function addition </msg></logentry>",
"@version" : "1",
"@timestamp" : ISODate("2015-09-23T19:10:54.824Z"),
"path" : "C:/DevInsight/svnpredictor/svn/svn.log",
"host" : "WIN-5BRSCLOQIVN",
"type" : "XML",
"author" : "447085",
"revision" : "15234",
"date" : "2016-07-19T12:39:19.707782Z",
"paths" : { "path" : [
{ "action" : "M",
"kind" : "file",
"prop-mods" : "false",
"text-mods" : "true",
"content" : "/itdp/branches/itdpux/branches/base/itdp2.0/src/com/cts/race/beans/ProgramChronicleBean.java"
} ] }
我想提取特定日期范围内的记录的 revision,content 字段。 mongo 导出应存储到 CSV 中,字段为 revision_id,file_name 。我试过下面的命令
C:\mongodb\bin\mongoexport --db dbname --collection cname -f 'revision,paths.path.content' --query "{'date': { '$lt': {'$date' : ISODate('%1')} , '$gte': {'$date': ISODate('%2') }}}" --out "C:\test\mongodata.csv"
我使用上面的命令得到以下输出-
{"_id":{"$oid":"57e57e3fb04c6373f7000003"},"paths":{"path":[{ ///整个路径标签内容/// }]}
我的实际输出应该是这样的-
revision_id,file_name
15234,/itdp/branches/itdpux/branches/base/itdp2.0/web/xhtml/progchronicle_iux.xhtml
该命令的一个好处是我能够提取我指定日期范围内的所有记录。
请检查我的代码并帮助我
问题是你没有定义类型,因此 mongoexport 创建了一个 json 文件,你应该使用
--type=csv
关于export array objects的真正问题,答案已经在
whosebug.com Array
您的 paths.path
元素是一个数组。如果你想正确导出它,你必须使用以下命令:
C:\mongodb\bin\mongoexport --db dbname --collection cname -f 'revision,paths.path.0.content' --query "{'date': { '$lt': {'$date' : ISODate('%1')} , '$gte': {'$date': ISODate('%2') }}}" --out "C:\test\mongodata.csv"
显然,如果 paths.path
是一个随机长度的数组,就会出现一些问题。在这种情况下,您必须使用循环编写自己的脚本。
我的 mongo collection 中有 2250 条记录。
下面是 collection -
中的一条记录"_id" : bjectId("57e57e3fb04c6373f7000002"),
"message" : "<logentry revision='15234'><author>447085</author><date>2016-07-19T12:39:19.707782Z</date><paths><path prop-mods='false' text-mods='true' kind='file' action='M'>/itdp/branches/itdpux/branches/base/itdp2.0/src/com/cts/race/beans/ProgramChronicleBean.java</path></paths><msg>day week month function addition </msg></logentry>",
"@version" : "1",
"@timestamp" : ISODate("2015-09-23T19:10:54.824Z"),
"path" : "C:/DevInsight/svnpredictor/svn/svn.log",
"host" : "WIN-5BRSCLOQIVN",
"type" : "XML",
"author" : "447085",
"revision" : "15234",
"date" : "2016-07-19T12:39:19.707782Z",
"paths" : { "path" : [
{ "action" : "M",
"kind" : "file",
"prop-mods" : "false",
"text-mods" : "true",
"content" : "/itdp/branches/itdpux/branches/base/itdp2.0/src/com/cts/race/beans/ProgramChronicleBean.java"
} ] }
我想提取特定日期范围内的记录的 revision,content 字段。 mongo 导出应存储到 CSV 中,字段为 revision_id,file_name 。我试过下面的命令
C:\mongodb\bin\mongoexport --db dbname --collection cname -f 'revision,paths.path.content' --query "{'date': { '$lt': {'$date' : ISODate('%1')} , '$gte': {'$date': ISODate('%2') }}}" --out "C:\test\mongodata.csv"
我使用上面的命令得到以下输出-
{"_id":{"$oid":"57e57e3fb04c6373f7000003"},"paths":{"path":[{ ///整个路径标签内容/// }]}
我的实际输出应该是这样的-
revision_id,file_name 15234,/itdp/branches/itdpux/branches/base/itdp2.0/web/xhtml/progchronicle_iux.xhtml
该命令的一个好处是我能够提取我指定日期范围内的所有记录。
请检查我的代码并帮助我
问题是你没有定义类型,因此 mongoexport 创建了一个 json 文件,你应该使用
--type=csv
关于export array objects的真正问题,答案已经在
whosebug.com Array
您的 paths.path
元素是一个数组。如果你想正确导出它,你必须使用以下命令:
C:\mongodb\bin\mongoexport --db dbname --collection cname -f 'revision,paths.path.0.content' --query "{'date': { '$lt': {'$date' : ISODate('%1')} , '$gte': {'$date': ISODate('%2') }}}" --out "C:\test\mongodata.csv"
显然,如果 paths.path
是一个随机长度的数组,就会出现一些问题。在这种情况下,您必须使用循环编写自己的脚本。