我试图模仿以下内容。
我有一个名为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的属性,但我不知道如何... 你能帮助我朝正确的方向发展吗?
谢谢! 史蒂芬
答案 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”。 您可以将两个模型放在同一个文件中,也可以要求第二个文件中的第一个文件 。