DevGang
Авторизоваться

Как оптимизировать поисковые запросы в MongoDB

Поиск в базе данных для извлечения нужных данных может быть весьма затруднительным, если у вас нет подходящих инструментов или вы не знаете, как их использовать.

MongoDB — это нереляционная база данных без SQL, которая отличается от реляционных баз данных на основе SQL, таких как PostgresSQL, MySQL.

Эти базы данных на основе SQL используют обычные строки и столбцы для отображения данных, тогда как MongoDB использует коллекции. Из-за этого основного различия вам важно понимать некоторые специальные термины, специфичные для MongoDB.

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

Просмотрев несколько веб-сайтов и книг, я наконец смог это сделать. Итак, в этом руководстве моя цель — упростить сложные операции поиска MongoDB для вас, как нового пользователя MongoDB.

Я надеюсь, что эта статья ответит на ваши животрепещущие вопросы и поможет вам разобраться в операциях запросов MongoDB.

Прежде чем мы начнем, вот несколько важных предварительных условий для этого урока:

  • Базовые знания Node.js.
  • Базовые знания MongoDB.
  • Знание команд MongoDB.
  • Знание Postman

Что такое запросы MongoDB?

Запросы — это команды, которые вы используете для получения данных из базы данных MongoDB. Они работают аналогично системе запросов SQL, но имеют другой синтаксис.

Обычный SQL-запрос выглядит так:

“SELECT * FROM db.Users”(SQL) vs  “db.collection.find(MONGO DB)”

Эта команда позволяет вам получить все данные, хранящиеся в базе данных пользователей.

Многие операторы запросов можно использовать в коллекции баз данных MongoDB для получения соответствующей информации. Но в этом уроке я расскажу больше о некоторых важных из них.

Примеры запросов MongoDB

Теперь я объясню некоторые операторы запросов, доступные вам в MongoDB. Вы можете запустить примеры кода, представленные ниже, в интерфейсе командной строки MongoDB, чтобы увидеть, как они работают.

Find(): этот оператор возвращает все документы в коллекции. Вы можете проверить это, запустив;

Db.collection.find()

В этом случае замените коллекцию фактическим названием collection, в которой вы собираетесь искать.

findOne(): этот оператор запроса возвращает первый документ в коллекции, соответствующий фильтру, прикрепленному к оператору.

Db.collection.findOne()

Aggregate(): этот оператор сопоставляет результаты из различных документов в данной коллекции. Вы можете комбинировать его с другими операторами запросов для эффективной организации результатов и группировки различных данных.

Вы увидите пример использования этого оператора вместе с операторами запроса ограничения и сортировки.

limit(): этот оператор ограничивает общее количество ожидаемых результатов поиска указанным числом.

db.collection.aggregate([{ $limit: 6 }]);

Этот код выше ограничивает общее количество агрегированных данных до 6.

Sort(): этот оператор сортирует результаты поискового запроса в порядке возрастания или убывания.

db.collection.aggregate([
  { $sort: { fieldName: 1 } } // Replace 'fieldName' with the actual field name and use 1 for ascending or -1 for descending order
]);

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

Как реализовать поисковые запросы в MongoDB с помощью Node.js

Node.js — это серверный язык на основе JavaScript, и в этом руководстве мы будем использовать его для использования MongoDB.

Прямо сейчас мы напишем код для поиска документов с использованием внутренней среды Node.js Express.

Mongoose будет служить связующим звеном между MongoDB и Node. Но прежде чем мы углубимся, что такое Mongoose?

Что такое Mongoose?

Mongoose — популярный инструмент объектно-реляционного сопоставления (ORM), который помогает установить эффективное соединение между базой данных (MongoDB) и объектно-ориентированным языком программирования (Node.js/JavaScript).

Он предоставляет обширные функции, такие как моделирование данных, разработка схем, аутентификация модели и управление данными, что упрощает взаимодействие веб-API и базы данных.

Вы также можете использовать его для взаимодействия с другими базами данных, такими как Redis, MySQL и Postgres.

Теперь давайте настроим Mongoose.

Npm install mongoose

Чтобы подключить его к MongoDB в приложении Node.js, используйте следующий код:

const mongoose = require("mongoose");

mongoose.connect('mongodb://localhost/location', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
  autoIndex: true
})
  .then(() => {
    console.log("Connected to MongoDB");
  })
  .catch((err) => {
    console.error(err);
  });

Этот код инициирует соединение с базой данных MongoDB и поддерживает соединение, обеспечивая обмен данными с серверным приложением.

Как искать документы в MongoDB

В этом разделе мы еще больше улучшим наш поисковый запрос, применив некоторые операции MongoDB, которые мы изучили в предыдущих разделах. Мы получим книги в базе данных на основе параметра findOne, о котором мы кратко упомянули ранее.

Сначала давайте воспользуемся оператором Find() следующим образом:

router.get("/", async (req, res) => {
  try {
    const books = await Book.find();
    res.status(200).json(books);
  } catch (err) {
    res.status(500).json(err);
  }
});

Приведенный выше код запрашивает все книги в базе данных. В случае успешного выполнения он возвращает код состояния 200 со всеми книгами в коллекции в формате JSON. В случае неудачи возвращается код ошибки.

Как мы можем применить оператор Limit() следующим образом:

router.get("/", async (req, res) => {
  try {
    let limitedBooks = await Book.find().limit(6);
    res.status(200).json(limitedBooks);
  } catch (err) {
    res.status(500).json(err);
  }
});

Этот код очень похож на приведенный выше код. Но к нему прикреплен дополнительный оператор ограничения, который ограничивает ожидаемый ответ первыми 6 книгами из базы данных.

И, наконец, мы применим оператор FindOne():

router.get("/", async (req, res) => {
  try {
    let myBook = await Book.findOne({ Author: "Man" });
    res.status(200).json(myBook);
  } catch (err) {
    res.status(500).json(err);
  }
});

В приведенном выше коде мы попытались найти первую книгу, написанную кем-то по имени «Человек». Если он успешно найдет этот документ, он вернет код успеха 200 и формат JSON этой коллекции книг в базе данных, в противном случае он вернет код ошибки.

Как искать между текстами в MongoDB

Поиск между текстами предполагает более сложный подход к поиску в базе данных MongoDB.

Он предполагает поиск текстов и фраз во всей базе данных, а затем отображение информации об объектах, содержащих эти искомые тексты.

Он обычно используется в сложных поисковых операциях, чтобы включать только информацию, сгруппированную по цене, авторам, адресу, возрасту или любой другой соответствующей общей переменной.

Итак, теперь давайте реализуем специальный оператор поискового запроса MongoDB. Мы будем использовать этот оператор для поиска между текстами и возвращать результаты по мере необходимости.

Код для этого показан ниже:

let myBook = await Book.find({
  "$or": [
    { Author: { $regex: req.params.key } },
    { Title: { $regex: req.params.key } },
  ]
});

Этот код выше использует формат регулярных выражений, чтобы помочь найти фразы в базе данных и вернуть их. Regex работает по принципу сопоставления набора строк с похожими шаблонами. Это помогает обеспечить более быстрый ответ на наши поисковые запросы и возвращает только те документы, которые похожи на наш поиск.

Заключение

На этом мы подошли к концу урока. Мы надеемся, что вы узнали по существу о поисковых запросах MongoDB и о том, как использовать различные операторы поиска для получения наилучших результатов из вашей базы данных.

Не стесняйтесь оставлять комментарии и вопросы, а также читайте другие мои статьи здесь. До следующего раза продолжайте программировать.

Источник:

#MongoDB
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу