creazione di schemi di mangusta

Ho appena iniziato con la mangusta. Ho uno script di creazione con mangusta che crea gli schemi e db con dati di esempio.

Ora scrivo l’applicazione effettiva. Devo creare l’object schema ogni volta che viene eseguita la mia applicazione o è già disponibile in qualche modo?

In altre parole ho bisogno di eseguire questo codice in ogni app che utilizza mangusta per accedere al db o solo la prima volta:

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

Come cambierebbe la risposta se avessi setter / convalide / etc?

Uno definisce Schema modo che l’applicazione comprenda come mappare i dati da MongoDB in oggetti JavaScript. Schema è una parte dell’applicazione. Non ha nulla a che fare con il database. Mappa solo il database in oggetti JavaScript. Quindi sì, se vuoi avere una buona mapping devi eseguire questo codice in ogni applicazione che ne ha bisogno. Si applica anche ai getter / setter / validazioni / ecc.

Nota comunque che facendo questo:

 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); 

registrerà Schema globaly. Ciò significa che se l'applicazione che stai utilizzando utilizza un modulo esterno, in questo modulo puoi semplicemente usarlo

 var mongoose = require('mongoose'); var Comments = mongoose.model("Comments"); Comments.find(function(err, comments) { // some code here }); 

(si noti che in realtà è necessario registrare lo Schema prima di utilizzare questo codice, altrimenti verrà generata un'eccezione).

Tuttavia, tutto ciò funziona solo all'interno di una sessione di nodo, quindi se si sta eseguendo un'altra app di nodo che richiede l'accesso allo Schema , è necessario chiamare il codice di registrazione. Quindi è una buona idea definire tutti gli schemi in file separati, ad esempio comments.js può assomigliare a questo

 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); }; 

quindi crea file models.js che può assomigliare a questo

 var models = ['comments.js', 'someothermodel.js', ...]; exports.initialize = function() { var l = models.length; for (var i = 0; i < l; i++) { require(models[i])(); } }; 

Ora chiamata require('models.js').initialize(); inizializzerà tutti i tuoi Schemi per una data sessione di nodo.

È necessario eseguire questo codice di inizializzazione ogni volta che si esegue l’app per registrare gli schemi della tua app con mangusta.

Al termine della tua app, mangusta non memorizza il tuo schema (s). Pertanto, la prossima volta che esegui un’applicazione che utilizza uno schema, devi registrare nuovamente i tuoi schemi.

Tuttavia, è abbastanza facile impostare la tua app per farlo.

Ecco due link al codice che dimostrano come si possono inizializzare gli schemi in mangusta. Il primo è in JavaScript, il secondo è in CoffeeScript.

https://github.com/fbeshears/register_models

https://github.com/fbeshears/register_coffee_models

Le demo JavaScript sono solo un’app.

Il codice CoffeeScript ha due app separate. Il primo archivia i documenti con MongoDB, il secondo trova e visualizza i documenti memorizzati dalla prima app.