MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Ereditare gli schemi di Mongoose

Discriminators sono un meccanismo di ereditarietà dello schema. Ti consentono di avere più modelli con schemi sovrapposti sulla stessa raccolta MongoDB sottostante . piuttosto che documenti diversi. Sembra che tu abbia frainteso i discriminators di mangusta. Ecco un articolo che potrebbe aiutarti a catturarlo correttamente.

Guida ai discriminatori della mangusta

Di seguito sono riportati alcuni esempi di codici per soddisfare le tue esigenze, per salvare lo schema derivato come documenti separati

function AbstractEntitySchema() {   
    //call super        
    Schema.apply(this, arguments);     
    //add                                     
    this.add({                              
        entityName: {type: String, required: false},
        timestamp: {type: Date, default: Date.now},
        index: {type: Number, required: false},
        objectID: {type: String},
        id: {type: String}
    });                                     
};
util.inherits(AbstractEntitySchema, Schema);

//Message Schema
var MessageSchema = new AbstractEntitySchema();
MessageSchema.add({
    text: {type: String, required: true},
    author: {type: String, required: true},
    type: {type: String, required: false}
});

//Room Schema
var RoomSchema = new AbstractEntitySchema();
RoomSchema.add({
    name: {type: String, required: true},
    author: {type: String, required: false},
    messages : [MessageSchema],
});

var Message = mongoose.model('Message', MessageSchema);
var Room = mongoose.model('Room', RoomSchema);

// save data to Message and Room

var aMessage = new Message({
     entityName: 'message',
     text: 'Hello',
     author: 'mmj',
     type: 'article'
    });

 var aRoom = new Room({
     entityName: 'room',
     name: 'Room1',
     author: 'mmj',
     type: 'article'
 });

 aRoom.save(function(err, myRoom) { 
    if (err)
        console.log(err);
    else                                  
        console.log("room is saved"); 
 });

 aMessage.save(function(err) {
    if (err)
        console.log(err);
    else
        console.log('user is saved');
 });