我正在研究一個文檔結構,它可以在保持可重建結構的同時輕鬆搜索。我的意思是,文檔本身包含CMS所需的信息,用於構建更新文檔所需的表單。搜索和CMS使用的最有效的JSON/mongodb文檔結構是什麼?
關鍵在於文檔的最終結構永遠不會被知道,因爲它將通過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"
}
}
}
什麼是最好的方法?
我很可能會把整個事情搞得複雜化,而且在我面前有一個簡單的解決方案。
對不起,如果我錯過了你的問題,但定義「最好」。可擴展的?高效?爲什麼搜索查詢在第二種方法中變得「更困難」? CMS的目標受衆是什麼 - 您或整個世界? –
謝謝您對此的意見。我認爲我通過在查詢速度方面說高效來定義最好,但是在處理文檔方面的可擴展性和總體效率也很重要。我只能索引已知字段,因爲大多數字段不會被知道,似乎查詢會更快,沒有嵌入式文檔,因爲結構中混合了數據。 CMS將被公共使用。 – sterling
由於字段是不可知的,聽起來你可以使用鏈接到其他文檔ID的全文索引 - 你如何觸發這個索引的更新將是你的下一個挑戰。 MongoDB不適用於全面的全文搜索-http://www.mongodb。org/display/DOCS/Full + Text + Search + in + Mongo#FullTextSearchinMongo-ComparisontoFullTextSearchEngines –