update tutorial español node.js mongodb mongoose

node.js - tutorial - creación de esquema de mangosta



mongoose update (2)

Necesitará ejecutar este código de inicialización cada vez que ejecute su aplicación para registrar los Schemas de su aplicación con mangosta.

Cuando finalice su aplicación, Mangosta no almacenará su (s) esquema (s). Por lo tanto, la próxima vez que ejecute una aplicación que utiliza un esquema, debe registrar sus esquemas nuevamente.

Sin embargo, es bastante fácil configurar tu aplicación para hacerlo.

Aquí hay dos enlaces al código que demuestra cómo uno puede inicializar esquemas en mangosta. El primero está en JavaScript, el segundo está en CoffeeScript.

https://github.com/fbeshears/register_models

https://github.com/fbeshears/register_coffee_models

Las demostraciones de JavaScript son solo una aplicación.

El código CoffeeScript tiene dos aplicaciones separadas. El primero almacena documentos con MongoDB, el segundo encuentra y muestra los documentos almacenados por la primera aplicación.

Acabo de comenzar con mangosta. Tengo un script de creación con mangosta que crea los esquemas y db con datos de muestra.

Ahora escribo la aplicación real. ¿Necesito crear el objeto de esquema cada vez que se ejecuta mi aplicación, o ya está disponible de alguna manera?

En otras palabras, necesito ejecutar este código en todas las aplicaciones que usan mangostas para acceder a la base de datos o simplemente la primera vez:

var Comments = new Schema({ title : String , body : String , date : Date });

¿Cómo cambiaría la respuesta si tuviera setters / validations / etc?


Uno define Schema para que la aplicación comprenda cómo asignar datos desde el MongoDB a objetos JavaScript. Schema es una parte de la aplicación. No 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.

Sin embargo, tenga en cuenta 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 que está ejecutando usa algún módulo externo, 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 realmente 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 el acceso al Schema , 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 require(''models.js'').initialize(); inicializará todos sus esquemas para una sesión de nodo determinada.