2017-06-06 8 views
1

私は次のモデルをしようとしています。どのように私はマングースで子モデルを生成することができます

parent model私はBrickと呼ばれ、いくつかの属性を持っています。 5種類以上のレンガがあり、それらにはそれぞれ固有の属性が必要です。

タイプ(TwitterBrick、facebookBrickなど)に関係なく、特定のカストマーIDのすべてのレンガを選択できます。

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

もちろん、1つのコレクションに複数のスキーマを持つことができます!宣言のために私の編集をチェックしてください:) – Sparw

+0

cool!どうもありがとう! – socialb

1

ブリックモデルを属性(コンポジション)として追加するだけです。 それはそれを補うでしょう。 またはそのための既存のマングースプラグインに頼ってhttps://github.com/briankircho/mongoose-schema-extend これをチェックしてください。

+0

こんにちは、私は現在スキーマ拡張ソリューションを試していますが、エラーに遭遇しています(答えとして追加しました)。あなたはそれを修正する方法を知っていますか? – socialb

0

これは、が以前のファイルを「必要としていない」ため、技術的には範囲外であり、TwitterWallBrickSchemaは「BrickSchema」という手がかりを持っていません。 2つのモデルを同じファイルに配置するか、2番目のファイルの最初のファイルを必要とします。

関連する問題