Se define Schema
para que la aplicación comprenda cómo asignar datos de MongoDB a objetos de JavaScript. Schema
es una parte de la aplicación. Tiene nada que ver con la base de datos. Solo asigna la base de datos en objetos de JavaScript. Entonces, sí, si desea tener un buen mapeo, debe ejecutar este código en cada aplicación que lo necesite. También se aplica a getters/setters/validations/etc.
Nota 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
globaly. Esto significa que si la aplicación se está ejecutando está utilizando algún módulo exterior, entonces en este módulo puede simplemente usar
var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
// some code here
});
(tenga en cuenta que en realidad se necesita registrar el Schema
antes de utilizar este código, de otro modo una excepción será arrojado).
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 el acceso al Schema
, debe llamar al código de registro. Por lo tanto, es una buena idea para definir todos los esquemas en archivos separados, por ejemplo comments.js
puede tener este aspecto
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);
};
continuación, crear el archivo models.js
que puede tener este aspecto
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 require('models.js').initialize();
inicializará todos de sus esquemas para una sesión de nodo determinada.
Sí, esto es genial. Al usar este método, ¿tiene alguna idea sobre cómo manejar las dependencias (documentos incrustados)? –
@AdrienSchuler No hay problema con las dependencias. Usted define los documentos Embededd como de costumbre, en uno de los archivos. Solo asegúrate de que si el archivo 'second.js' se refiere al modelo en el archivo' first.js', entonces 'first.js' va antes que' second.js' en la variable 'model'. – freakish
Esto suena genial, voy a intentarlo, ¡gracias! –