Man definiert Schema
Daher versteht die Anwendung, wie Daten aus der MongoDB in JavaScript-Objekte abgebildet werden. Schema
ist Bestandteil der Bewerbung. Es hat nichts mit Datenbank zu tun. Es ordnet Datenbanken nur JavaScript-Objekten zu. Also ja - wenn Sie ein schönes Mapping haben möchten, müssen Sie diesen Code in jedem ausführen Anwendung, die es braucht. Es gilt auch für Getter/Setter/Validierungen/etc.
Beachten Sie jedoch Folgendes:
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);
registriert Schema
global. Das bedeutet, wenn die von Ihnen ausgeführte Anwendung ein externes Modul verwendet, können Sie in diesem Modul einfach
var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
// some code here
});
(Beachten Sie, dass Sie das Schema
tatsächlich registrieren müssen bevor Sie diesen Code verwenden, sonst wird eine Ausnahme geworfen).
All dies funktioniert jedoch nur innerhalb einer Knotensitzung, wenn Sie also eine andere Knotenanwendung ausführen, die Zugriff auf das Schema
benötigt , dann müssen Sie den Registrierungscode aufrufen. Daher ist es eine gute Idee, alle Schemas in separaten Dateien zu definieren, zum Beispiel comments.js
könnte so aussehen
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);
};
Erstellen Sie dann die Datei models.js
die so aussehen kann
var models = ['comments.js', 'someothermodel.js', ...];
exports.initialize = function() {
var l = models.length;
for (var i = 0; i < l; i++) {
require(models[i])();
}
};
Rufen Sie jetzt require('models.js').initialize();
auf wird alle Ihre Schemas für eine bestimmte Knotensitzung initialisieren.