Подтвердить что ты не робот

Создание схемы мангуста

Я только начал с мангуста. У меня есть создание script с mongoose, которое создает схемы и db с образцами данных.

Теперь я пишу фактическое приложение. Нужно ли мне создавать объект схемы каждый раз, когда мое приложение запускается или оно уже доступно?

Другими словами, мне нужно запустить этот код в каждом приложении, использующем mongoose для доступа к db или только в первый раз:

var Comments = new Schema({
    title     : String
  , body      : String
  , date      : Date
});

Как бы изменился ответ, если у меня есть настройки/валидации/etc?

4b9b3361

Ответ 1

Определяет 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 перед использованием этого кода, иначе будет выведено исключение).

Однако все это работает только внутри одного сеанса node, поэтому, если вы используете другое приложение node, которому нужен доступ к 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(); инициализирует все ваши схемы для заданного сеанса node.

Ответ 2

Вам нужно запустить этот код инициализации каждый раз, когда вы запустите приложение, чтобы зарегистрировать свое приложение. Схемы с мангустом.

Когда ваше приложение заканчивается, mongoose не хранит ваши Схемы. Итак, в следующий раз, когда вы запустите приложение, использующее схему, вам нужно снова зарегистрировать свои схемы.

Однако для этого достаточно просто настроить приложение.

Вот две ссылки на код, которые демонстрируют, как можно инициализировать схемы в мангусте. Первый - в JavaScript, второй - в CoffeeScript.

https://github.com/fbeshears/register_models

https://github.com/fbeshears/register_coffee_models

Демо-версии JavaScript - это всего лишь одно приложение.

Код CoffeeScript имеет два отдельных приложения. Первый хранит документы с MongoDB, второй находит и отображает документы, хранящиеся в первом приложении.