2017-06-06 44 views
1

我想模擬以下內容。我怎樣才能生成貓鼬的兒童模型

我有一個叫做Brickparent model,它有一些屬性。 將會有5種以上的磚塊都會有自己特定的屬性,這些屬性也是需要的。

我希望以後能夠選擇某個custumer id的所有bricks,無論類型是什麼(TwitterBrick,facebookBrick et cetera)。

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

// set up a mongoose model 
module.exports = mongoose.model('Brick', new Schema({ 
    type: String, 
    userid: { type: String, required: true}, 
    animationspeed: { type: Number, min: 1, max: 100 }, 
    socialsite: String,  // none, twitter, instagram 
    socialsearchtags: String, 
    tagline: { type: String, minlength:3,maxlength: 25 }, 

})); 

一個孩子一個例子是TwitterBrick。 現在它是:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
module.exports = mongoose.model('TwitterBrick', new Schema({ 
    bgColor1: String, 
    bgColor2: String, 
    bannerBgColor1: String, 
    bannerBgColor2: String, 
})); 

TwitterBrick應該繼承磚的屬性,但我不知道如何.. 你能幫助我在正確的方向?

謝謝! Steven

回答

2

我的解決辦法是建立一個新的 「內容」,在brickSchema在不同的文件領域,和分裂:

brick.schema.js

var mongoose = require('mongoose'); 

    module.exports = { 
      type: String, 
      userid: { type: String, required: true}, 
      animationspeed: { type: Number, min: 1, max: 100 }, 
      socialsite: String,  // none, twitter, instagram 
      socialsearchtags: String, 
      tagline: { type: String, minlength:3,maxlength: 25 }, 
      content: {type:mongoose.Schema.Types.Mixed, required: false, default: null} 
    } 

brick.model.js

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var BrickSchema = new Schema(require('brick.schema.js')); 
module.exports = mongoose.model('defaultBrick', BrickSchema, 'Bricks'); 

twitterBrick.model.js

var mongoose = require('mongoose'); 
    var Schema = mongoose.Schema; 
    var brickSchema = require('brick.schema.js'); 

    brickSchema.content = new Schema({ 
    bgColor1: String, 
    bgColor2: String, 
    bannerBgColor1: String, 
    bannerBgColor2: String, 
}); 

var BrickSchema = new Schema(require('brick.schema.js')); 
module.exports = mongoose.model('twitterBrick', BrickSchema, 'Bricks'); 

希望它有幫助!

+0

感謝您的幫助!我正在嘗試它。採用這種方法是否有可能將不同種類的磚模型分爲1個集合? – socialb

+0

當然,您可以在一個集合中擁有多個模式!檢查我的編輯聲明:) – Sparw

+0

酷!非常感謝! – socialb

1

只需添加Brick模型作爲屬性(構圖)。 它會彌補這一點。 或只是依靠現有的貓鼬插件https://github.com/briankircho/mongoose-schema-extend 檢查這一個。

+0

嗨,我現在嘗試模式擴展解決方案,但遇到一個錯誤,(我將它添加爲答案)。你知道如何解決這個問題嗎? – socialb

0

這是因爲你沒有「要求」以前的文件,所以從技術上說它超出了範圍,TwitterWallBrickSchema沒有線索什麼是「BrickSchema」。 要麼你把兩個模型放在同一個文件中,要麼需要第一個文件在第二個文件