我有一個可怕的數據結構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
順便說一句,請不要在近距離投票中發飆(這是我的權利),它只是我使用的機制(因爲它應該被使用)來幫助防止提交非答案已經完成了)需要澄清的問題,如果問題已經清楚地回答,我總是會提出投票。 –