Uno define Schema
por lo que la aplicación entiende cómo asignar datos de MongoDB a objetos de JavaScript. Schema
es una parte de la aplicación. No tiene nada que ver con la base de datos. Solo mapea la base de datos en objetos JavaScript. Entonces, sí, si desea tener un buen mapeo, debe ejecutar este código en cada aplicación que lo necesita. También se aplica a getters/setters/validations/etc.
Tenga en cuenta, sin embargo, que al hacer esto:
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);
registrará Schema
globalmente Esto significa que si la aplicación que está ejecutando está usando algún módulo exterior, entonces en este módulo simplemente puede usar
var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
// some code here
});
(tenga en cuenta que en realidad necesita registrar el Schema
antes de usar este código, de lo contrario, se lanzará una excepción).
Sin embargo, todo esto funciona solo dentro de una sesión de nodo, por lo que si está ejecutando otra aplicación de nodo que necesita acceso al Schema
, entonces debe llamar al código de registro. Por lo tanto, es una buena idea definir todos los esquemas en archivos separados, por ejemplo, comments.js
puede verse así
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);
};
luego crea el archivo models.js
que puede verse así
var models = ['comments.js', 'someothermodel.js', ...];
exports.initialize = function() {
var l = models.length;
for (var i = 0; i < l; i++) {
require(models[i])();
}
};
Ahora llamando a require('models.js').initialize();
inicializará todos sus esquemas para una sesión de nodo determinada.