Mongoose – это библиотека, которая облегчает использование MongoDB. Это делает две вещи:
- Это дает структуру в коллекциях MongoDB
- Это дает вам полезные методы для использования
В этой статье вы узнаете, как использовать Mongoose на базовом уровне.
Предпосылки
Я предполагаю, что вы сделали следующее:
- Вы установили MongoDB на своем компьютере
- Вы знаете, как настроить локальное соединение MongoDB
- Вы знаете, как увидеть данные, которые у вас есть в вашей базе данных
- Вы знаете, что такое «коллекции» в MongoDB
Если вы не знаете ничего из них, пожалуйста, прочитайте «Как настроить локальное соединение MongoDB» прежде чем продолжить.
Я также предполагаю, что вы знаете, как использовать MongoDB для создания простого приложения CRUD. Если вы не знаете, как это сделать, пожалуйста, прочитайте «Как построить приложение CRUD с узлом, Express и Mongodb» прежде чем продолжить.
Подключение к базе данных
Во-первых, вам нужно скачать монгуст.
npm install mongoose --save
Вы можете подключиться к базе данных с соединить
метод. Допустим, мы хотим подключиться к базе данных под названием Уличные бойцы
Отказ Вот код, который вам нужен:
const mongoose = require('mongoose') const url = 'mongodb://127.0.0.1:27017/street-fighters' mongoose.connect(url, { useNewUrlParser: true })
Мы хотим знать, успешно ли наша связь или потерпела неудачу. Это помогает нам с отладкой.
Чтобы проверить, удалось ли соединение, мы можем использовать открыть
мероприятие. Чтобы проверить, не удалось ли соединение, мы используем Ошибка
. мероприятие.
const db = mongoose.connection db.once('open', _ => { console.log('Database connected:', url) }) db.on('error', err => { console.error('connection error:', err) })
Попробуйте подключиться к базе данных. Вы должны увидеть журнал, как это:
Создание модели
В мангусе вам нужно Используйте модели для создания, чтения, обновления или удаления элементов от коллекции монгодб.
Создать модель, Вам нужно создать схему Отказ Схема позволяет вам ** Определить структуру входа ** в коллекции. Эта запись также называется документом.
Вот как вы создаете схему:
const mongoose = require('mongoose') const Schema = mongoose.Schema const schema = new Schema({ // ... })
Вы можете использовать 10 различных видов ценностей в схеме. Большую часть времени вы будете использовать эти шесть:
- Нить
- Число
- Логический
- Множество
- Дата
- Объект
Давайте поставим это на практику.
Скажем, мы хотим создавать персонажи для нашей уличной базы данных.
В мангусе, это нормальная практика в Поместите каждую модель в свой файл. Итак, мы создадим Charace.js
файл сначала. Это Charace.js
Файл будет размещен в модели
папка.
project/ |- models/ |- Character.js
В Charace.js
мы создаем Случающиесямы
Отказ
const mongoose = require('mongoose') const Schema = mongoose.Schema const characterSchema = new Schema({ // ... })
Допустим, мы хотим сэкономить две вещи в базу данных:
- Имя персонажа
- Наименование их окончательного движения
Оба могут быть представлены строками.
const mongoose = require('mongoose') const Schema = mongoose.Schema const characterSchema = new Schema({ name: String, ultimate: String })
Как только мы создали Случающиесямы
мы можем использовать Mongoose Модель
Способ создания модели.
module.exports = mongoose.model('Character', characterSchema)
Создание характера
Допустим, у вас есть файл под названием index.js
Отказ Это где мы выполним мангусты операции для этого учебника.
project/ |- index.js |- models/ |- Character.js
Во-первых, вам нужно загрузить модель символов. Вы можете сделать это с требуется
Отказ
const Character = require('./models/Character')
Допустим, вы хотите создать персонаж под названием RYU. У RYU есть конечный ход под названием «Шинку Хадкен».
Чтобы создать RYU, вы используете Новый
следуют ваша модель. В этом случае это Новый персонаж
Отказ
const ryu = new Character ({ name: 'Ryu', ultimate: 'Shinku Hadoken' })
Новый персонаж
Создает персонаж в памяти. Это еще не было сохранено в базу данных. Чтобы сохранить в базе данных, вы можете запустить Сохранить
Метод Отказ
ryu.save(function (error, document) { if (error) console.error(error) console.log(document) })
Если вы запустите код выше, вы должны увидеть это в консоли.
Обещания и Async/ждут
Монгуст поддерживает обещания. Это позволяет писать хороший код, как это:
// This does the same thing as above function saveCharacter (character) { const c = new Character(character) return c.save() } saveCharacter({ name: 'Ryu', ultimate: 'Shinku Hadoken' }) .then(doc => { console.log(doc) }) .catch(error => { console.error(error) })
Вы также можете использовать ждать
Ключевое слово, если у вас есть асинхронная функция.
Если обещание или код Async/a ждать, выглядит зарубежным для вас, я рекомендую читать «JavaScript Async и ждет» прежде чем продолжить с этим руководством.
async function runCode() { const ryu = new Character({ name: 'Ryu', ultimate: 'Shinku Hadoken' }) const doc = await ryu.save() console.log(doc) } runCode() .catch(error => { console.error(error) })
Примечание. Я буду использовать формат Async/ждут для остальной части учебника.
Уникальность
Mongoose добавляет новый символ в базу данных каждого, которую вы используете Новый персонаж
и Сохранить
Отказ Если вы запускаете код (ы) выше трех раз, вы ожидаете увидеть три RYU в базе данных.
Мы не хотим иметь три RYU в базе данных. Мы хотим иметь Один только Рю Отказ Для этого мы можем использовать Уникальный вариант.
const characterSchema = new Schema({ name: { type: String, unique: true }, ultimate: String })
Уникальный
Опция Создает уникальный индекс Отказ Он гарантирует, что мы не можем иметь два документа с одинаковым значением (для имя
в этом случае).
Для Уникальный
работать правильно, вам нужно Очистить коллекцию персонажей Отказ Чтобы очистить коллекцию персонажей, вы можете использовать это:
await Character.deleteMany({})
Попробуйте добавить два ryus в базу данных сейчас. Вы получите E11000 дубликата ключевой ошибки
Отказ Вы не сможете спасти второй Рю.
Давайте добавим другой символ в базу данных, прежде чем продолжить остальную часть учебника.
const ken = new Character({ name: 'Ken', ultimate: 'Guren Enjinkyaku' }) await ken.save()
Извлечение персонажа
Монгуст дает вам два метода, чтобы найти вещи из MongoDB.
Findone
: Получает один документ.Найти
: Получает массив документов
indone.
Findone
Возвращает первый документ Он находит. Вы можете указать любое свойство для поиска. Давайте искать Рю
:
const ryu = await Character.findOne({ name: 'Ryu' }) console.log(ryu)
найти
Найти
Возвращает массив документов. Если вы укажете свойство для поиска, он вернет документы, которые соответствуют вашему запросу.
const chars = await Character.find({ name: 'Ryu' }) console.log(chars)
Если вы не укажете какие-либо свойства для поиска, он вернет массив, который содержит все документы в коллекции.
const chars = await Character.find() console.log(chars)
Обновление персонажа
Допустим, у RYU есть три специальных хода:
- Преданный
- Shoryuken
- Tatsumaki Senpukyaku
Мы хотим добавить эти специальные перемещения в базу данных. Во-первых, нам нужно обновить наши Случающиесямы
Отказ
const characterSchema = new Schema({ name: { type: String, unique: true }, specials: Array, ultimate: String })
Затем мы используем один из этих двух способов обновления символа:
- Использовать
Findone
Затем используйтеспасти
- Использовать
Yinkoneandupdate.
inDoone и сохранить
Во-первых, мы используем Findone
чтобы получить Рю.
const ryu = await Character.findOne({ name: 'Ryu' }) console.log(ryu)
Затем мы обновляем RYU, чтобы включить его специальные движения.
const ryu = await Character.findOne({ name: 'Ryu' }) ryu.specials = [ 'Hadoken', 'Shoryuken', 'Tatsumaki Senpukyaku' ]
После того, как мы изменили Рю
мы бежим Сохранить
Отказ
const ryu = await Character.findOne({ name: 'Ryu' }) ryu.specials = [ 'Hadoken', 'Shoryuken', 'Tatsumaki Senpukyaku' ] const doc = await ryu.save() console.log(doc)
Yinkoneanduppdate
такой же, как MongoDB indowoneanddmodify
метод.
Здесь вы ищете RYU и пропустите поля, которые вы хотите обновить одновременно.
// Syntax await findOneAndUpdate(filter, update)
// Usage const doc = await Character.findOneAndUpdate( { name: 'Ryu' }, { specials: [ 'Hadoken', 'Shoryuken', 'Tatsumaki Senpukyaku' ] }) console.log(doc)
Два основных различия.
Во-первых, Синтаксис для Findone
+ Сохранить
легче читать чем Yinkoneanduppdate
Отказ
Во-вторых, Yinkoneanduppdate
не вызывает Сохранить
промежуточное ПО.
Я выберу Findone
+ Сохранить
над Yinkoneanduppdate
в любое время из-за этих двух различий.
Удаление персонажа
Есть два способа удалить символ:
Findone
+Удалить
Findoneandddelete.
const ryu = await Character.findOne({ name: 'Ryu' }) const deleted = await ryu.remove()
Использование YinkoneandDdelete.
const deleted = await Character.findOneAndDelete({ name: 'Ken' })
Вы узнали, как использовать Mongoose:
- Подключиться к базе данных
- Создать, читать, обновлять и удалять документы
Спасибо за прочтение. Эта статья была первоначально опубликована на мой блог Отказ Подпишись на Моя рассылка Если вы хотите больше статей, чтобы помочь вам стать лучшим разработчиком Frontend.