Рубрики
Без рубрики

Mongoose 101.

Mongoose – это библиотека, которая облегчает использование MongoDB. В этой статье вы узнаете, как использовать Mongoose на базовом уровне.

Автор оригинала: Zell Liew.

Mongoose – это библиотека, которая облегчает использование MongoDB. Это делает две вещи:

  1. Это дает структуру в коллекциях MongoDB
  2. Это дает вам полезные методы для использования

В этой статье вы узнаете, как использовать Mongoose на базовом уровне.

Предпосылки

Я предполагаю, что вы сделали следующее:

  1. Вы установили MongoDB на своем компьютере
  2. Вы знаете, как настроить локальное соединение MongoDB
  3. Вы знаете, как увидеть данные, которые у вас есть в вашей базе данных
  4. Вы знаете, что такое «коллекции» в 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({
  // ...
})

Допустим, мы хотим сэкономить две вещи в базу данных:

  1. Имя персонажа
  2. Наименование их окончательного движения

Оба могут быть представлены строками.

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 в базе данных.

Три Ryus в базе данных.

Мы не хотим иметь три 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.

  1. Findone : Получает один документ.
  2. Найти : Получает массив документов

indone.

Findone Возвращает первый документ Он находит. Вы можете указать любое свойство для поиска. Давайте искать Рю :

const ryu = await Character.findOne({ name: 'Ryu' })
console.log(ryu)
Нашел RYU из базы данных.

найти

Найти Возвращает массив документов. Если вы укажете свойство для поиска, он вернет документы, которые соответствуют вашему запросу.

const chars = await Character.find({ name: 'Ryu' })
console.log(chars)
Расчесывается через базу данных и нашел один символ с именем ryu.

Если вы не укажете какие-либо свойства для поиска, он вернет массив, который содержит все документы в коллекции.

const chars = await Character.find()
console.log(chars)
Нашел два символа в базе данных.

Обновление персонажа

Допустим, у RYU есть три специальных хода:

  1. Преданный
  2. Shoryuken
  3. Tatsumaki Senpukyaku

Мы хотим добавить эти специальные перемещения в базу данных. Во-первых, нам нужно обновить наши Случающиесямы Отказ

const characterSchema = new Schema({
  name: { type: String, unique: true },
  specials: Array,
  ultimate: String
})

Затем мы используем один из этих двух способов обновления символа:

  1. Использовать Findone Затем используйте спасти
  2. Использовать 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 в любое время из-за этих двух различий.

Удаление персонажа

Есть два способа удалить символ:

  1. Findone + Удалить
  2. Findoneandddelete.
const ryu = await Character.findOne({ name: 'Ryu' })
const deleted = await ryu.remove()

Использование YinkoneandDdelete.

const deleted = await Character.findOneAndDelete({ name: 'Ken' })

Вы узнали, как использовать Mongoose:

  1. Подключиться к базе данных
  2. Создать, читать, обновлять и удалять документы

Спасибо за прочтение. Эта статья была первоначально опубликована на мой блог Отказ Подпишись на Моя рассылка Если вы хотите больше статей, чтобы помочь вам стать лучшим разработчиком Frontend.