Определяет Schema
, поэтому приложение понимает, как отображать данные из MongoDB в объекты JavaScript. Schema
является частью приложения. У этого есть ничего, чтобы сделать с базой данных. Он только отображает базу данных в объекты JavaScript. Так что да - если вы хотите иметь хорошее сопоставление, вам нужно запустить этот код в каждый приложение, которое в нем нуждается. Это также относится к геттерам/сеттерам/валидации/и т. Д.
Однако обратите внимание, что делает это:
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
globaly. Это означает, что если приложение вы работаете используете некоторый внешний модуль, то в этом модуле вы можете просто использовать
var mongoose = require('mongoose');
var Comments = mongoose.model("Comments");
Comments.find(function(err, comments) {
// some code here
});
(обратите внимание, что на самом деле нужно зарегистрировать Schema
перед использованием этого кода, в противном случае исключение будет выброшен).
Однако все это работает только внутри одного узла, поэтому, если вы используете другое приложение узла, которому необходим доступ к Schema
, вам необходимо вызвать регистрационный код. Так что это хорошая идея, чтобы определить все Schemas в отдельных файлах, например 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();
будет инициализировать все ваших схем для заданного сеанса узла.
Да, это круто. Используя этот метод, есть ли у вас какие-либо идеи относительно того, как обращаться с зависимостями (встроенными документами)? –
@AdrienSchuler Нет проблем с зависимостями. Вы определяете документы Embededd как обычно, в одном из файлов. Просто убедитесь, что если файл 'second.js' относится к модели в файле' first.js', то 'first.js' переходит перед' second.js' в переменную 'model'. – freakish
Звучит здорово, я попробую это, спасибо! –