Как использовать MongoDB с Node.js

В этом руководстве я покажу вам, как взаимодействовать с базой данных MongoDB из Node.js.

Если вы не знакомы сMongoDBознакомьтесь с нашим руководством по его основам, а также о том, как его установить и использовать :)

Мы будем использовать официальнуюmongodb npmупаковка. Если у вас уже есть проект Node.js, над которым вы работаете, установите его с помощью

npm install mongodb

Если вы начинаете с нуля, создайте новую папку со своимТерминали бегиnpm init -yчтобы запустить новый проект Node.js, а затем запуститеnpm install mongodbкоманда.

Подключение к MongoDB

Вам требуетсяmongodbpackage, и вы получите из него объект MongoClient.

const mongo = require('mongodb').MongoClient

Создайте URL-адрес сервера MongoDB. Если вы используете MongoDB локально, URL-адрес будет примерно таким:mongodb://localhost:27017, в качестве27017порт по умолчанию.

const url = 'mongodb://localhost:27017'

Затем используйтеmongo.connect()для получения ссылки на клиент экземпляра MongoDB:

mongo.connect(url, {
    useNewUrlParser: true,
    useUnifiedTopology: true
  }, (err, client) => {
  if (err) {
    console.error(err)
    return
  }
  //...
})

Теперь вы можете выбрать базу данных с помощьюclient.db()метод:

const db = client.db('kennel')

Создать и получить коллекцию

Вы можете получить коллекцию, используяdb.collection()метод. Если коллекции еще нет, она создается.

const collection = db.collection('dogs')

Вставить данные в коллекцию Документ

Добавьте в app.js следующую функцию, которая используетinsertOne()метод добавления объектаdogsколлекция.

collection.insertOne({name: 'Roger'}, (err, result) => {

})

Вы можете добавить несколько элементов, используяinsertMany(), передавая массив в качестве первого параметра:

collection.insertMany([{name: 'Togo'}, {name: 'Syd'}], (err, result) => {

})

Найти все документы

Использоватьfind()в коллекции, чтобы получить все документы, добавленные в коллекцию:

collection.find().toArray((err, items) => {
  console.log(items)
})

Найдите конкретный документ

Передать объект вfind()метод фильтрации коллекции на основе того, что вам нужно получить:

collection.find({name: 'Togo'}).toArray((err, items) => {
  console.log(items)
})

Если вы знаете, что получите один элемент, можете пропуститьtoArray()преобразование курсора путем вызоваfindOne():

collection.findOne({name: 'Togo'}, (err, item) => {
  console.log(item)
})

Обновить существующий документ

ИспользоватьupdateOne()способ обновления документа:

collection.updateOne({name: 'Togo'}, {'$set': {'name': 'Togo2'}}, (err, item) => {
  console.log(item)
})

Удалить документ

ИспользоватьdeleteOne()способ удаления документа:

collection.deleteOne({name: 'Togo'}, (err, item) => {
  console.log(item)
})

Закрытие соединения

Как только вы закончите с операциями, вы можете вызватьclose()на клиентском объекте:

client.close()

Используйте обещания или async / await

Я разместил все эти примеры, используяПерезвонитесинтаксис. Этот API поддерживаетобещанияасинхронный / ожидание) также.

Например это

collection.findOne({name: 'Togo'}, (err, item) => {
  console.log(item)
})

Может использоваться с обещаниями:

collection.findOne({name: 'Togo'})
  .then(item => {
    console.log(item)
  })
  .catch(err => {
  console.error(err)
  })

или async / await:

const find = async () => {
  try {
    const item = await collection.findOne({name: 'Togo'})
  } catch(err => {
  console.error(err)
  })
}

find()

Скачать мою бесплатнуюСправочник по Node.js


Дополнительные руководства по узлам: