Единият дефинира Schema
така приложението разбира как да картографира данни от MongoDB в JavaScript обекти. Schema
е част от приложението. В него няманищо да правим с базата данни. Той само картографира базата данни в JavaScript обекти. Така че да - ако искате да имате хубаво картографиране, трябва да стартирате този код във всяка приложение, което се нуждае от него. Също така се отнася за getters/setters/validations/etc.
Обърнете внимание обаче, че правите това:
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);
ще регистрира Schema
глобално. Това означава, че ако приложението, което изпълнявате, използва някакъв външен модул, тогава в този модул можете просто да използвате
var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
// some code here
});
(обърнете внимание, че всъщност трябва да регистрирате Schema
преди да използвате този код, в противен случай ще бъде изведено изключение).
Всичко това обаче работи само в една сесия на възел, така че ако използвате друго приложение на възел, което се нуждае от достъп до Schema
, тогава трябва да се обадите на регистрационния код. Така че е добра идея да дефинирате всички схеми в отделни файлове, например comments.js
може да изглежда така
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);
};
след това създайте файл models.js
което може да изглежда така
var models = ['comments.js', 'someothermodel.js', ...];
exports.initialize = function() {
var l = models.length;
for (var i = 0; i < l; i++) {
require(models[i])();
}
};
Сега се извиква require('models.js').initialize();
ще инициализира всичките ви схеми за дадена сесия на възел.