Mongoose начало работы

Для начала убедитесь что у вас установлены MongoDB и Node.js.

Далее установите mongoose через командную строку используя npm.

npm install mongoose

Теперь предположим что нам нравятся пушистые котята и мы хотим каждого котенка, которого когда-либо встречали, записать в MongoDB. Первое что нам необходимо сделать, это подключить mongoose в наш проект и открыть соединение к тестовой базе данных на нашем локально запущенном экземпляре MongoDB.

// getting-started.js
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

У нас есть ожидающее подключение к тестовой базе данных запущенной на локальном хосте. Теперь нам нужно получить уведомление, если мы подключились успешно, либо произошла ошибка подключения:

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function () {
  // мы подключены!
});

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

В Mongoose все происходит от схемы. Давайте создадим ссылку на неё и определим наших котят.

var kittySchema = mongoose.Schema({
  name: String
});

Пока все хорошо. У нас есть схема с одним свойством name, которое будет иметь тип String. Следующий шаг, это компиляция нашей схемы в модель.

var Kitten = mongoose.model('Kitten', kittySchema);

Модель — это класс, с помощью которого мы создаем документы. В этом случае, каждый документ будет котенком со свойствами и поведением, объявленными в нашей схеме. Давайте создадим документ котенка, представляющий маленького парня, которого мы только что встретили на тротуаре снаружи:

var silence = new Kitten({ name: 'Мурзик' });
console.log(silence.name); // 'Мурзик'

Котята могут мяукать, поэтому давайте посмотрим как добавить функцию “speak” в наши документы:

// Обратите внимание, что методы должны быть добавлены в схему перед ее преобразованием в модель
kittySchema.methods.speak = function () {
  var greeting = this.name
    ? 'Мяу, меня зовут ' + this.name
    : 'У меня нет имени';
  console.log(greeting);
};

var Kitten = mongoose.model('Kitten', kittySchema);

Функции, добавленные к свойству methods схемы, преобразуются в прототип модели и доступны на каждом экземпляре документа:

var fluffy = new Kitten({ name: 'Мурзик' });
fluffy.speak(); // "Мяу, меня зовут Мурзик"

Теперь у нас говорящие котята! Но мы до сих пор ничего не сохранили в MongoDB. Каждый документ может быть сохранен в базу данных с помощью вызова собственного метода save. Первый аргумент в коллбэке будет ошибкой, если что-то пошло не так.

fluffy.save(function (err, fluffy) {
  if (err) return console.error(err);
  fluffy.speak();
});

Вскоре мы захотим отобразить всех котят что мы видели. Мы можем получить доступ ко всем документам котят через нашу модель Kitten.

Kitten.find(function (err, kittens) {
  if (err) return console.error(err);
  console.log(kittens);
});

Мы только что вывели всех наших котят из базы данных в консоль. Если мы хотим отфильтровать наших котят по имени, то Mongoose поддерживает богатый синтаксис запросов MongoDB.

Kitten.find({ name: /^Мурзик/ }, callback);

Данный запрос выполняет поиск всех документов, у которых свойство name начинается с “Мурзик” и возвращает результат как массив котят в коллбэке.

Поздравляем!

Это конец нашего быстрого старта. Мы создали схему, добавили кастомные методы в документ, сохранили и затем выбрали котят из MongoDB используя Mongoose. Теперь отправляйтесь к руководству или API чтобы узнать больше.

Оригинальная статья: Mongoose v6.0.9: Getting Started