我有一个可怕的数据结构MongoDB聚合查询拆分和转换JSON?
{ "@timestamp" : "20160226T065604,39Z",
"@toplevelentries" : "941",
"viewentry" : [ { "@noteid" : "161E",
"@position" : "1",
"@siblings" : "941",
"entrydata" : [
和entrydata一个JSON文件941项,其中的每一个看起来像这样
{ "@columnnumber" : "0",
"@name" : "$Created",
"datetime" : { "0" : "20081027T114133,55+01" }
},
{ "@columnnumber" : "1",
"@name" : "WriteLog",
"textlist" : { "text" : [ { "0" : "2008.OCT.28 12:54:39 CET # EMI" },
{ "0" : "2008.OCT.28 12:56:13 CET # EMI" },
还有更多的列的列表。结构始终是这样的:
{
"@columnnumber": "17",
"@name": "PublicDocument",
"text": {
"0": "TMI-1-2005.pdf"
}
}
有一列数字,我们可以扔掉,一个@name这是重要的组成部分,那么文字,datetime或文本清单的领域之一,其中的值总是这种怪异的子文档与一个0键和实际值。
所有941个条目具有相同数量的这些列条目,并且列条目始终是相同的结构。 IE浏览器。如果"@columnnumber": "13"
有一个@name: foo
那么它将永远是富,如果它有一个datetime
键,那么它总是会有一个日期时间键,从来没有一个文本或文本列表。这个怪物是在流水线最远端的SQL或类似数据库中出现的,但除此之外,我无法访问源代码。我们的目标是恢复转换并将其转化为SELECT
声明会产生的内容(除了文本列表,尽管我猜array_agg
以及类似的文件也可以生成)。
有没有办法让941个独立JSON条目出的MongoDB看起来像:
{
$Created: "20081027T114133,55+01",
WriteLog: ["2008.OCT.28 12:54:39 CET # EMI", "2008.OCT.28 12:56:13 CET # EMI"],
PublicDocument: "TMI-1-2005.pdf"
}
这里的文档结构不太清楚。你总是在处理'@'和'1'的@ columnnumber值吗?此外,聚合框架(以及如此恕我直言)不以任何方式将数据点转换为“密钥”。如果这些在你的输出中不是固定值(总是只有'$ Created'和'WriteLog',那么mapReduce可能是更好的选择。但是,如果你正在“聚合”任何东西,或者只是寻找内容,可以更清晰,也可以方便地知道数组数据是否固定在索引点总是或不是 –
对不起,还有更多的列,直接转换,是的,“数组数据总是固定在索引点上。不要理解你的意思 – chx
顺便说一句,请不要在近距离投票中发飙(这是我的权利),它只是我使用的机制(因为它应该被使用)来帮助防止提交非答案已经完成了)需要澄清的问题,如果问题已经清楚地回答,我总是会提出投票。 –