Jeden definiuje Schema
dzięki czemu aplikacja rozumie, jak mapować dane z MongoDB na obiekty JavaScript. Schema
jest częścią aplikacji. Nie ma nic zrobić z bazą danych. Odwzorowuje tylko bazę danych na obiekty JavaScript. Więc tak - jeśli chcesz mieć ładne mapowanie, musisz uruchomić ten kod w każdym aplikacja, która tego potrzebuje. Dotyczy to również getterów/seterów/walidacji/itd.
Pamiętaj jednak, że robiąc to:
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);
zarejestruje Schema
globalnie. Oznacza to, że jeśli uruchomiona aplikacja korzysta z zewnętrznego modułu, w tym module możesz po prostu użyć
var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
// some code here
});
(zauważ, że faktycznie musisz zarejestrować Schema
przed użyciem tego kodu, w przeciwnym razie zostanie zgłoszony wyjątek).
Jednak wszystko to działa tylko w jednej sesji węzła, więc jeśli używasz innej aplikacji węzła, która potrzebuje dostępu do Schema
, musisz zadzwonić pod kod rejestracyjny. Dlatego dobrym pomysłem jest zdefiniowanie wszystkich schematów w osobnych plikach, na przykład comments.js
może wyglądać tak
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);
};
następnie utwórz plik models.js
który może wyglądać tak
var models = ['comments.js', 'someothermodel.js', ...];
exports.initialize = function() {
var l = models.length;
for (var i = 0; i < l; i++) {
require(models[i])();
}
};
Teraz wywoływanie require('models.js').initialize();
zainicjuje wszystkie twoje schematy dla danej sesji węzła.