sql >> Base de Datos >  >> NoSQL >> MongoDB

creación de esquema de mangosta

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.