アプリケーションエラーログをjsonドキュメントとして保存するためにmongodbを使用しています。プレーンな json をブラウザーに返すのではなく、エラー ログを HTML としてフォーマットできるようにしたいと考えています。ログは適切にスキーマレスです-いつでも変更される可能性があるため、これを実行しようとしても意味がありません (ジェイドで):
- var items = jsonResults
- each item in items
h3 Server alias: #{item.ServerAlias}
p UUID: #{item.UUID}
p Stack trace: #{item.StackTrace}
h3 Session: #{item.Session}
p URL token: #{item.Session.UrlToken}
p Session messages: #{item.Session.SessionMessages}
JSON構造に実際に何が入るかは事前にわかりません。でも、私が望むことは確かに可能ですか?私が読んでいるものはすべて、スキーマはデータベースによって強制されていないが、とにかくビューコードがスキーマの概要を説明していると言っています-しかし、いつでも削除または追加できる可能性のあるフィールドが何百もあるので、ビューを管理しますこの方法はかなり扱いにくいです。
私は何が欠けていますか?テクノロジーについて間違った仮定をしていますか? これは間違った方法で行っていますか?
コメントに続く追加情報で編集:
jsonドキュメントは次のようになります
{
"ServerAlias":"GBIZ-WEB",
"Session":{
"urltoken":"CFID=10989&CFTOKEN=f07fe950-53926E3B-F33A-093D-3FCEFB&jsessionid=84303d29a229d1",
"captcha":{
},
"sessionmessages":{
},
"sessionid":"84197a667053f63433672873j377e7d379101"
},
"UUID":"53934LBB-DB8F-79T6-C03937JD84HB864A338",
"Template":"\/home\/vagrant\/dev\/websites\/g-bis\/code\/webroot\/page\/home\/home.cfm, line 3",
"Error":{
"GeneratedContent":"",
"Mailto":"",
"RootCause":{
"Message":"Unknown tag: cfincflude.",
"tagName":"cfincflude",
"TagContext":[
{
"RAW_TRACE":"\tat cfhome2ecfm1296628853.runPage(\/home\/vagrant\/dev\/websites\/nig-bis\/code\/webroot\/page\/home\/home.cfm:3)",
"ID":"CFINCLUDE",
"TEMPLATE":"\/home\/vagrant\/dev\/websites\/nig-bis\/code\/webroot\/page\/home\/home.cfm",
"LINE":3,
"TYPE":"CFML",
"COLUMN":0
},
{
"RAW_TRACE":"\tat cfdisplay2ecfm1093821753.runPage(\/home\/vagrant\/dev\/websites\/nig-bis\/code\/webroot\/page\/display.cfm:6)",
"ID":"CFINCLUDE",
"TEMPLATE":"\/home\/vagrant\/dev\/websites\/nig-bis\/code\/webroot\/page\/display.cfm",
"LINE":6,
"TYPE":"CFML",
"COLUMN":0
}
]
}
}
...などですが、ログを生成する個々のプロジェクトが何をトリガーするように構成されているかによって変わる可能性があります。
私が最終的に作成したいのは、データ構造を反復処理する、各親と以下にリストされている子のヘッダーを備えたフォーマット済みの HTML ページです。上記の Jade のサンプルは、事実上、出力する必要があるものですが、ビューにハードコーディングする必要はありません。
問題のコメントでのマイクの分析は、実際にはあまり共通点のない一連のコレクションからテーブルのような構造を作成することであるということです。データはリレーショナルですが、個々のドキュメント内のみです。そのため、データ構造がどのように見えるかを最初に知る必要があるため、スキーマを何かにハードコーディングすることは事実上不可能です。