2017-07-12 2 views
1

Je suis complètement nouveau dans le monde NoSQL et j'ai eu du mal à m'en sortir. Cette semaine, j'apprenais MongoDB (Mongoose) avec Node.js et voici mon schéma actuel:Questions sur la conception de schéma de Mongoose

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); 

Maintenant que cela fonctionne, je voudrais ajouter un utilisateur et mot de passe et avoir accès à avoir un accès personnel à EventData.

Aussi ... plus tard si je veux envoyer un JSON de seulement le eventData, mais pas l'utilisateur à mon javascript, comment est-ce que je ferais cela?

La façon dont je suis en train d'envoyer mes EventData à mes js dans ce format:

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

Merci encore

+0

Pouvez-vous s'il vous plaît être plus précis? –

+0

Bien sûr ... Je veux implémenter dans ce schéma un utilisateur et un mot de passe à utiliser pour l'authentification, mais à l'intérieur de ce schéma, je veux aussi avoir beaucoup de blocs de eventData. Exemple: utilisateur: John Doe mot de passe: 123 événements: [{_id: 1 notes: Événement A start_date: 1/1/01, date_fin: 1/1/01, }, { _id: 2 notes: événement B start_date: 02/01/01, date_fin: 02/01/01, }, { _id: 3 notes: événement C start_date: 03/01/01, date_fin: 1/3/01, }] – user258813

+0

John Doe s'inscrirait et aurait accès à ses événements A, B et C. Alors qu'il pourrait y avoir un autre utilisateur avec une collection différente d'événements – user258813

Répondre

1

Comme je peux comprendre que vous voulez ajouter la clé des événements dans votre schéma. Ensuite, votre schéma sera comme ça:

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); 
}); 

Si le code ci-dessus ne fonctionne pas, vous pouvez alors créer deux schémas, l'un pour l'utilisateur et d'autres pour EventData, et peut remplir vos EventData en userSchema.

de sorte que votre code sera comme ça:

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); 
}); 

Et votre eventDataSchema sera:

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); 
}); 

et vous pouvez obtenir le résultat comme ça: 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()); 

Résultat:

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

} 
+0

merci monsieur . C'est ce que j'avais du mal à comprendre, mais en voyant votre exemple, cela a plus de sens maintenant. – user258813

+0

Bienvenue @ utilisateur258813 –