2017-06-06 77 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”。 要么你把两个模型放在同一个文件中,要么需要第一个文件在第二个文件