2013-05-14 33 views
9

正確定義或不writing必須 writing: [Schema.Types.Mixed]writing: [{}]下面的架構?也就是說,如果有一個字典數組 - [{},{},{}] - 除非創建另一個模式並嵌入它,否則不能預定義內部結構。這是對文檔的正確解釋嗎?理解貓鼬[Schema.Types.Mixed]

http://mongoosejs.com/docs/schematypes.html

var blogSchema = new mongoose.Schema({ 
    title: String, 
    writing: [{ 
     post: String, 
     two: Number, 
     three : Number, 
     four : String, 
     five : [{ a: String, 
        b : String, 
        c : String, 
        d: String, 
        e: { type: Date, default: Date.now }, 
       }] 
    }], 
}); 

感謝。

回答

18

該模式很好。定義數組模式元素中的對象將被隱式視爲其自己的對象。這樣他們將有自己的_id領域,但你可以通過禁用_id選項明確定義模式禁用:

var blogSchema = new mongoose.Schema({ 
    title: String, 
    writing: [new Schema({ 
     post: String, 
     two: Number, 
     three : Number, 
     four : String, 
     five : [new Schema({ 
      a: String, 
      b: String, 
      c: String, 
      d: String, 
      e: { type: Date, default: Date.now }, 
     }, {_id: false})] 
    }, {_id: false})], 
}); 
+2

好。 「隱式模式」是一個很大的見解。謝謝。這是否意味着我應該使用.populate()來處理這些問題。我一直在努力從數組中的字典中獲取信息。 – 2013-05-14 01:54:45

+2

@ cathy.sasaki不,這是嵌入式對象的模式。當模式顯式包含對另一個集合(模型)的ObjectId引用時,您只能使用'populate'。 – JohnnyHK 2013-05-14 01:58:15

+1

@JonnyHK明白了。你是mongodb的讀者,是否有你推薦的特定書?還是你只是窮人的文件?我試圖在這方面着手建立知識基礎。 – 2013-05-14 02:00:48