Mongoose представляет специальную ODM-библиотеку (Object Data Modelling) для работы с MongoDB, которая позволяет сопоставлять объекты классов и документы коллекций из базы данных. Грубо говоря, Mongoose работает подобно инструментам ORM. Официальный сайт библиотеки, где можно посмотреть всю необходимую документацию: http://mongoosejs.com
Для работы с Mongoose продолжим работу с проектом из прошлых тем и вначале установим саму библиотеку с помощью команды:
npm install mongoose --save
Далее определим следующий код в файле приложения app.js:
const mongoose = require("mongoose"); const Schema = mongoose.Schema; // установка схемы const userScheme = new Schema({ name: String, age: Number }); // определяем модель User const User = mongoose.model("User", userScheme); // создаем объект модели User const user = new User({ name: "Bill", age: 41}); async function main() { // подключемся к базе данных await mongoose.connect("mongodb://127.0.0.1:27017/usersdb"); // сохраняем модель user в базу данных await user.save(); console.log("Сохранен объект", user); // отключаемся от базы данных await mongoose.disconnect(); } // запускаем подключение и взаимодействие с базой данных main().catch(console.log);
Здесь прежде всего нам надо подключить mongoose:
const mongoose = require("mongoose");
Данные, которые используются в Mongoose, описываются определенной схемой. Например, в прошлых темах мы сохраняли в базу данных объекты с двумя
свойствами name
и age
. Поэтому описываем здесь следующую схему:
const Schema = mongoose.Schema; // установка схемы const userScheme = new Schema({ name: String, age: Number });
Схема содержит метаданные объектов. В частности, здесь устанавливаем, какие свойства будет иметь объект и какой у них будет тип данных. То есть это схема, которая описывает объект пользователя.
Затем, используя эту схему, создаем модель пользователя:
const User = mongoose.model("User", userScheme);
Первый параметр в методе mongoose.model указывает на название модели. Mongoose затем будет автоматически искать в базе данных коллекцию, название которой соответствует названию модели во множественном числе. Например, в данном случае название модели "User". Во множественном числе в соответствии с правилами английского языка это "users". Поэтому при работе с данными модели User (добавлении, удалении, редактировании и получении объектов) mongoose будет обращаться к коллекции "users". Если такая коллекция есть в бд, то с ней будет идти взаимодействие. Если такой коллекции в базе данных нет, то она будет создана автоматически.
Второй параметр функции mongoose.model
- собственно схема.
Далее мы можем создавать объекты этой модели:
const user = new User({ name: "Bill", age: 41 });
Основная логика сосредоточена в асинхронной функции main. И чтобы работать с бд MongoDB, необходимо к ней подключиться. Для подключения у объекта mongoose вызывается метод mongoose.connect(), в который передается адрес базы данных на сервере mongo:
await mongoose.connect("mongodb://127.0.0.1:27017/usersdb");
Этот метод возвращает объект Promise, поэтому при вызове метода в асинхронном методе можно применить оператор await
.
Затем у объекта вызывается метод save. Этот метод определен для всех создаваемых моделей, он сохраняет текущий объект в базу данных:
await user.save(); console.log("Сохранен объект", user);
С помощью метода mongoose.disconnect(); происходит отключение от бд.
Так как метод save возвращает promise, то есть и другая форма сохранения объекта:
await mongoose.disconnect(); });
Запустим приложение и выполним добавление объекта:
Сохранен объект { name: 'Bill', age: 41, _id: new ObjectId("6377c17b71c0bd75cec4d488"), __v: 0 }