こんにちは、マングースライブラリのスキーマを継承する必要があります。そのための完全なプラグインはありますか?または、どうすれば自分でそれを行うことができますか?
Baseスキーマからすべてのpre、post、initミドルウェアも継承する必要があります。
こんにちは、マングースライブラリのスキーマを継承する必要があります。そのための完全なプラグインはありますか?または、どうすれば自分でそれを行うことができますか?
Baseスキーマからすべてのpre、post、initミドルウェアも継承する必要があります。
この機能を探している他の人のために、Mongoose 3.8 には Discriminator 機能によるスキーマ継承が追加されました。
Mongoose プラグインの使用を検討することをお勧めします。
「箱から出して」必要なことを行うプラグインは次のとおりです。
これが古き良きものであることは承知していますが、同じ質問に対する答えを探してここにたどり着き、少し違うことをすることになりました。すべてのドキュメントが同じコレクションに保存されているため、識別子を使用したくありません。
ModelBase.js
var db = require('mongoose');
module.exports = function(paths) {
var schema = new db.Schema({
field1: { type: String, required: false, index: false },
field2: { type: String, required: false, index: false }
}, {
timestamps: {
createdAt: 'CreatedOn',
updatedAt: 'ModifiedOn'
}
});
schema.add(paths);
return schema;
};
NewModel.js
var db = require('mongoose');
var base = require('./ModelBase');
var schema = new base({
field3: { type: String, required: false, index: false },
field4: { type: String, required: false, index: false }
});
db.model('NewModelItem', schema, 'NewModelItems');
4 つのフィールドはすべて NewModelItem にあります。同じフィールド/オプション/その他を使用する他のモデルには ModelBase を使用します。私のプロジェクトでは、タイムスタンプをそこに入れました。
Schema.add は Schema コンストラクターで呼び出されるため、元のコンストラクター呼び出しですべてのフィールドが送信されたかのようにモデルを組み立てる必要があります。
別のコレクションを使用する場合:
function extendSchema (Schema, definition, options) {
return new mongoose.Schema(
Object.assign({}, Schema.obj, definition),
options
);
}
使用法:
const UserSchema = new mongoose.Schema({
firstname: {type: String},
lastname: {type: String}
});
const ClientSchema = extendSchema(UserSchema, {
phone: {type: String, required: true}
});
Mongoose のこのフレームワークのモデルを確認します。
https://github.com/marian2js/rode#models-with-mongoose
これは、このフレームワークで shemas を拡張するユーザーの例です。
まず、新しい「rod モデル」内でスキーマを定義します。
var rode = require('rode');
var User = rode.Model.extend({
name: 'User',
schema: {
name: {
type: 'String',
unique: true
},
email: String,
password: String
}
});
次に、extend メソッドを呼び出す必要があります。
var Admin = User.extend({
name: 'Admin',
// The schema for admins is the schema for users + their own schema
schema: {
lastAccess: Date
}
});
しかし、フレームワークの github から抽出された次のメモを心に留めておいてください。