再構築可能な構造を維持しながら、簡単に検索できるドキュメント構造に取り組んでいます。つまり、ドキュメント自体が、CMSがドキュメントを更新するために必要なフォームを作成するために必要な情報を保持しているということです。
重要な点は、CMSを介して作成/変更されるため、ドキュメントの最終的な構造がわからないことです。
目標は、フロントエンドのコンテンツメソッドが迅速に検索できるようにすると同時に、CMSがコンテンツを再構築して管理できるようにすることです。私は、CMSの管理領域をよりハードに機能させることに何の不安もありません。そこでは、速度はそれほど重要ではありません。
これが基本的な例です
これは非常に省略されたドキュメントですが、私のポイントを説明している可能性があります。このドキュメントは比較的簡単に照会できますが、CMSがどのように表示するかについての構造情報はありません。
{
"name" : "Page Name",
"title" : "Page Title",
"description" : "Page Description",
"page_heading" : "New Heading",
"content_body" : "<p>New Content</p>",
"slideshow" :
[
{
"image_title" : "Vacation Hawaii",
"image_file" : "hawaii100.jpg"
},
{
"image_title" : "Vacation Spain",
"image_file" : "Spain200.jpg"
},
]
}
構造データを省略した例を次に示します。
このアプローチの問題は、クエリがより困難になることです。
> db.posts.find( { page_heading.value : "example" } )
-
{
"name" : "Page Name",
"title" : "Page Title",
"description" : "Page Description",
"page_heading" :
{
"value" : "This is the page heading",
"type" : "string",
},
"content_body" :
{
"value" : "<p>HTML Content</p>",
"type" : "html_textarea",
},
"slideshow" :
{
"type" :
{
"image_title" : "string",
"image_file" : "file"
},
"value" :
[
{
"image_title" : "Vacation Hawaii",
"image_file" : "hawaii100.jpg"
},
{
"image_title" : "Vacation Spain",
"image_file" : "Spain200.jpg"
},
]
}
}
代替アプローチ
データ用とテンプレート用に別々のドキュメントを用意することは、可能な解決策のように思えますが、ロジスティックの複雑さが少し増します。
テンプレートにリンクするコンテンツドキュメント
{
"name" : "Page Name",
"title" : "Page Title",
"description" : "Page Description",
"template" : "document_id",
"page_heading" : "New Heading",
"content_body" : "<p>New Content</p>",
"slideshow" :
[
{
"image_title" : "Vacation Hawaii",
"image_file" : "hawaii100.jpg"
},
{
"image_title" : "Vacation Spain",
"image_file" : "Spain200.jpg"
},
]
}
テンプレートドキュメント
{
"parent" : "document_id",
"page_heading" :
{
"type" : "string",
"required" : true
},
"content_body" :
{
"type" : "html_textarea",
"required" : true
},
"slideshow" :
{
"type" :
{
"image_title" : "string",
"image_file" : "file"
}
}
}
最善のアプローチは何ですか?
私が全体を複雑にしすぎている可能性が高く、目の前に簡単な解決策がある可能性があります。