2017-07-12 7 views
1

Ich bin völlig neu in der NoSQL-Welt und es war schwierig, mich daran zu erinnern. Diese Woche war ich MongoDB (Mungo) mit Node.js Lernen und hier ist mein aktuelles Schema:Fragen über Mongoose Schema Design

var eventDataSchema = new Schema({ 
    _id  : Number, 
    notes  : {type: String, required: true}, 
    start_date : {type: Date, required: true}, 
    end_date : {type: Date, required: true}, 
}, { 
    id   : false, 
    collection : 'event-data' 
}); 
eventDataSchema.plugin(AutoIncrement); 

var EventData = mongoose.model('EventData', eventDataSchema); 

Nun, da dies funktioniert, würde Ich mag einen Benutzer und ein Passwort hinzufügen und Zugang persönlichen Zugang zu haben müssen EventData.

Auch ... später, wenn ich ein JSON nur der eventData senden möchte, aber nicht der Benutzer zu meinem Javascript, wie würde ich das tun?

Die Art, wie ich meinen derzeitigen eventdata auf meine js in diesem Format schicke:

router.get('/data', function(req, res){ 
    EventData.find({}, function(err, data){ 
    if (err) { 
     console.error('Error occured'); 
    } 
    res.send(data); 
    }); 
}); 

Thanks again

+0

Können Sie bitte etwas konkreter? –

+0

Sicher ... Ich möchte in diesem Schema einen Benutzer und ein Passwort für die Authentifizierung implementieren, aber innerhalb dieses Schemas möchte ich auch viele Blöcke von eventData haben. Beispiel: Benutzer: John Doe Passwort: 123 Ereignisse: [{_id: 1 Noten: Event-A start_date: 1.1.01, end_date: 1.1.01, }, { _id: 2 Anmerkungen: Ereignis B start_date: 1/2/01, end_date: 1/2/01, }, { _id: 3 Anmerkungen: Event C start_date: 1/3/01, end_date: 1/3/01, }] – user258813

+0

John Doe würde sich anmelden und Zugriff auf seine Ereignisse A, B und C haben. Während es einen anderen Benutzer mit einer anderen Sammlung von Ereignissen geben könnte – user258813

Antwort

1

Wie ich Sie wissen wollen Ereignisse Schlüssel in Ihrem Schema hinzuzufügen. Dann wird Ihr Schema aussehen:

var userSchema = new Schema({ 
     user: { type: String, required: true, trim: true }, 
     password: { type: String, required: true, trim: true }, 
     events: [{ 
      notes: { type: String,required: true, trim: true }, 
      start_date: { type: Date,required: true }, 
      end_date: { type: Date,required: true } 
      }] 
    } 
    userSchema.plugin(AutoIncrement); 
    var userSchema = mongoose.model('userSchema', userSchema); 
}); 

Wenn der obige Code nicht funktioniert, dann können Sie zwei Schemata erstellen, einen für Benutzer und andere für eventdata und Ihren in userSchema eventdata bevölkern kann.

so Ihr Code aussehen:

userSchema.js:

var userSchema = new Schema({ 
     user: { type: String, required: true, trim: true }, 
     password: { type: String, required: true, trim: true }, 
     events: {type: mongoose.Schema.Types.ObjectId, ref: 'EventData' } 

    userSchema.plugin(AutoIncrement); 
    module.exports = mongoose.model('userSchema', userSchema); 
}); 

Und Ihre eventDataSchema wird:

eventSchema.js:

var eventDataSchema = new Schema({ 
      notes: { type: 'string',required: true, trim: true }, 
      start_date: { type: Date,required: true }, 
      end_date: { type: Date,required: true } 
    } 
    eventDataSchema.plugin(AutoIncrement); 
    module.exports = mongoose.model('EventData', eventDataSchema); 
}); 

und dann können Sie das Ergebnis so erhalten: index.js:

var eventSchema = require('./eventSchema'); 
var userSchema = require('./userSchema'); 

var populate = [{ 
     path: 'events', 
     model: 'EventData', 
     select: '_id notes start_dat end_date' 
    }]; 

var find = function (query) { 
    return userSchema.find(query).populate(populate).exec(); 
} 
console.log(find()); 

Ergebnis:

{ 
     _id:cfgvhbjnkmkdcfxghgjklxnmbxhdhjxjhjhgx, 
     user: John Doe, 
     password: 123, 
     events: [ { _id: 1gfye56785g3ycgevhxeftx568765egcd, 
        notes: Event A, 
        start_date: 1/1/01, 
        end_date: 1/1/01 
       } ] 

} 
+0

danke gut Sir . Genau darum habe ich mich bemüht zu verstehen, aber wenn du dein Beispiel siehst, macht es jetzt mehr Sinn. – user258813

+0

Willkommen @ user258813 –