On définit Schema
afin que l'application comprenne comment mapper les données de MongoDB dans des objets JavaScript. Schema
fait partie de l'application. Il n'a rien à voir avec la base de données. Il ne mappe la base de données qu'en objets JavaScript. Alors oui - si vous voulez avoir un bon mappage, vous devez exécuter ce code dans chaque application qui en a besoin. Cela s'applique également aux getters/setters/validations/etc.
Notez cependant que faire ceci :
var mongoose = require('mongoose');
var Schema = mongoose.Schema; // <-- EDIT: missing in the original post
var Comments = new Schema({
title : String
, body : String
, date : Date
});
mongoose.model("Comments", Comments);
enregistrera Schema
globalement. Cela signifie que si l'application que vous exécutez utilise un module extérieur, alors dans ce module, vous pouvez simplement utiliser
var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
// some code here
});
(notez que vous devez en fait enregistrer le Schema
avant d'utiliser ce code, sinon une exception sera levée).
Cependant, tout cela ne fonctionne que dans une session de nœud, donc si vous exécutez une autre application de nœud qui a besoin d'accéder au Schema
, alors vous devez appeler le code d'enregistrement. C'est donc une bonne idée de définir tous les schémas dans des fichiers séparés, par exemple comments.js
peut ressembler à ceci
var mongoose = require('mongoose');
var Schema = mongoose.Schema; // <-- EDIT: missing in the original post
module.exports = function() {
var Comments = new Schema({
title : String
, body : String
, date : Date
});
mongoose.model("Comments", Comments);
};
puis créez le fichier models.js
qui peut ressembler à ceci
var models = ['comments.js', 'someothermodel.js', ...];
exports.initialize = function() {
var l = models.length;
for (var i = 0; i < l; i++) {
require(models[i])();
}
};
Appel maintenant require('models.js').initialize();
initialisera tous vos schémas pour une session de nœud donnée.