在你開始編寫模型之前,花幾分鐘的時間思考,我們需要儲存的數據以及不同對象之間的關係。
我們知道,我們需要儲存有關書籍的訊息(標題,摘要,作者,種類,國際標準書號),以及我們可能有多個副本可用(具有全域唯一 ID,可用狀態等)。我們可能需要存儲有關作者的更多訊息,而不僅僅是他們的名字,並且可能有多個作者,具有相同或相似的名稱。我們希望能夠根據書名,作者,種類和類別對訊息進行分類。
在設計模型時,對於每個「對象」(相關訊息組)都有獨立的模型,是有意義的。在這種情況下,明顯的對像是書籍,書籍實例和作者。
你可能還希望,使用模型來表示選擇列表選項(例如,選擇的下拉列表),而不是將選項硬編碼到網站本身— 在無法預先知道所有選項,或者可能更改時,更建議使用模型來表示。很明顯的,書本類型是這種模型的可能人選(例如科幻小說,法國詩歌等)。
一旦我們決定了我們的模型和字段,我們就需要考慮它們之間的關係。
考慮到這一點,下面的 UML 關聯圖,顯示了我們在這種情況下定義的模型(一個框對應一個模型)。如上所述,我們創建了以下模型,圖書(本書的通用細節),書本實例(系統中可用圖書的特定實際副本的狀態)和作者。我們還決定建立一個種類模型,以便可以動態創建它的值,而不是將下拉選項硬編碼。我們已經決定不為書本實例:狀態
BookInstance:status
建立模型—我們將硬編碼可接受的值,因為我們不希望這些值發生變化。在下圖每個框中,你可以看到模型名稱,字段名稱和類型,以及方法及其返回類型。
下圖還顯示了模型之間的關係,包括它們的多重性。多重性是圖中顯示可能存在於關係中的每個模型的數量(最大值和最小值)的數字。例如,框之間的連接線,顯示書本
Book
和種類
Genre
是相關的。靠近書本
Book
模型的數字,表明一本書必須有零個或多個種類(你想要多少都可以),而種類
Genre
旁邊一行的數字,表明它可以有零個或多個相關書籍。
正如我們在下面的
Mongoose 入門
中所討論的那樣,通常只需要在一個模型中定義文檔/模型之間關係的字段(通過在另一個模型中搜索相關的
_id
仍然可以找到反向關係)。下面我們選擇在書本綱要(Book schema)中定義 Book/Genre 和 Book/Author 之間的關係,以及書本實例綱要(BookInstance Schema)中 Book/BookInstance 之間的關係。這種選擇有點武斷—我們同樣可以在其他綱要中擁有該字段。
下一節提供了一個基本的入門知識,解釋如何定義和使用模型。在你閱讀它時,請想想我們將如何構建上圖中的每個模型。