Um define
Schema
para que o aplicativo entenda como mapear dados do MongoDB em objetos JavaScript. Schema
faz parte da aplicação. Não tem nada fazer com banco de dados. Ele apenas mapeia o banco de dados em objetos JavaScript. Então, sim - se você quiser ter um bom mapeamento, você precisa executar este código em todas aplicativo que precisa. Também se aplica a getters/setters/validations/etc. Observe, no entanto, que fazer isso:
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. Isso significa que se o aplicativo que você está executando estiver usando algum módulo externo, neste módulo você pode simplesmente usar var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
// some code here
});
(note que você realmente precisa registrar o
Schema
antes de usar este código, caso contrário, uma exceção será lançada). No entanto, tudo isso funciona apenas dentro de uma sessão de nó, portanto, se você estiver executando outro aplicativo de nó que precise de acesso ao
Schema
, então você precisa chamar o código de registro. Portanto, é uma boa ideia definir todos os Schemas em arquivos separados, por exemplo comments.js
pode parecer assim 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);
};
em seguida, crie o arquivo
models.js
que pode se parecer com isso var models = ['comments.js', 'someothermodel.js', ...];
exports.initialize = function() {
var l = models.length;
for (var i = 0; i < l; i++) {
require(models[i])();
}
};
Agora chamando
require('models.js').initialize();
irá inicializar todos os seus esquemas para uma determinada sessão de nó.