如何在猫鼬中生成子模型

时间:2017-06-06 12:06:52

标签: node.js mongoose mongoose-schema

我试图模仿以下内容。

我有一个名为parent model的{​​{1}},它有一些属性。 将会有5种以上的砖块都具有自己特定的属性。

我希望以后能够选择某个客户ID的所有砖块,无论类型如何(TwitterBrick,facebookBrick等等)。

Brick

儿童的一个例子是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

TwitterBrick应该继承Brick的属性,但我不知道如何... 你能帮助我朝正确的方向发展吗?

谢谢! 史蒂芬

3 个答案:

答案 0 :(得分: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');

希望它有所帮助!

答案 1 :(得分:1)

只需将Brick模型添加为属性(合成)。 它会弥补这一点。 或者只依靠现有的mongoose插件https://github.com/briankircho/mongoose-schema-extend 检查一下。

答案 2 :(得分:0)

那是因为你没有“需要”前一个文件,所以从技术上来说它超出了范围而TwitterWallBrickSchema并不知道什么是“BrickSchema”。 您可以将两个模型放在同一个文件中,也可以要求第二个文件中的第一个文件