Мангуста

Запросы Mongoose с комбинацией операторов «и» и «или»

Mongoose — это популярный инструмент сопоставления объектов и документов (ODM) для MongoDB, который обеспечивает простой и элегантный способ работы с базами данных MongoDB.

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

Предпосылки

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

  • Node.js и NPM (диспетчер пакетов Node), установленные на вашем компьютере
  • MongoDB установлен на вашем компьютере

Настройка мангуста

Чтобы начать работу с Mongoose, вам необходимо установить его с помощью NPM. Откройте терминал и выполните следующую команду:

npm install mongoos

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

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_database', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

В этом примере мы подключаемся к локальному экземпляру MongoDB, работающему на порту по умолчанию (27017), и указываем некоторые параметры, чтобы избежать предупреждений об устаревании.

Использование операторов and и or в Mongoose

Чтобы создать сложный запрос с комбинацией операторов and и or, вам необходимо использовать методы and и or, предоставляемые Mongoose. Метод and создает составной запрос, который объединяет несколько условий с помощью логического оператора and, а метод or создает составной запрос, который объединяет несколько условий с помощью логического оператора or.

Вот пример того, как использовать метод and для поиска всех документов в коллекции, где поле age больше или равно 18, а поле gender — «мужской»:

const User = mongoose.model('User', {
  name: String,
  age: Number,
  gender: String,
});
User.find({ $and: [{ age: { $gte: 18 } }, { gender: 'male' }] }, (err, users) => {
  if (err) {
    console.error(err);
  } else {
    console.log(users);
  }
});

В этом примере мы используем оператор $and для объединения двух условий: { age: { $gte: 18 } } и { gender: 'male' }. Метод find возвращает все документы в коллекции users, удовлетворяющие обоим условиям.

Вот пример того, как использовать метод or для поиска всех документов в коллекции, где поле age больше или равно 18 или поле gender является «женским»:

User.find({ $or: [{ age: { $gte: 18 } }, { gender: 'female' }] }, (err, users) => {
  if (err) {
    console.error(err);
  } else {
    console.log(users);
  }
});

В этом примере мы используем оператор $or для объединения двух условий: { age: { $gte: 18 } } и { gender: 'female' }. Метод find возвращает все документы в коллекции users, удовлетворяющие хотя бы одному из условий.

Использование комбинации операторов and и or

Чтобы создать сложный запрос с комбинацией операторов and и or, необходимо использовать оба метода в одном запросе. Вот пример того, как найти все документы в коллекции, где поле age больше или равно 18, а поле gender — «мужской» или поле gender — «недвоичное»:

User.find(
  {
    $and: [
      { age: { $gte: 18 } },
      { $or: [{ gender: 'male' }, { gender: 'non-binary' }] },
    ],
  },
  (err, users) => {
    if (err) {
      console.error(err);
    } else {
      console.log(users);
    }
  }
);

В этом примере мы используем оператор $and для объединения двух условий: { age: { $gte: 18 } } и { $or: [{ gender: 'male' }, { gender: 'non-binary' }] }. Метод find возвращает все документы в коллекции users, удовлетворяющие обоим условиям.

Использование схемы Mongoose для определения полей

Схемы Mongoose позволяют определять поля документа и указывать их типы данных и правила проверки. Вот пример того, как определить схему для модели User:

const userSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true,
  },
  age: {
    type: Number,
    required: true,
  },
  gender: {
    type: String,
    enum: ['male', 'female', 'non-binary'],
    required: true,
  },
});

В этом примере мы определяем схему для модели User с тремя полями: name, age и gender. Поля name и age обязательны, а поле gender обязательно и должно быть одним из значений в массиве enum.

Заключение

Mongoose предоставляет простой и мощный способ создания сложных запросов с комбинацией операторов and и or. Используя схемы Mongoose, вы можете определить поля документа и указать их типы данных и правила проверки. Это упрощает создание надежных и масштабируемых приложений, способных обрабатывать большие объемы данных. Благодаря знаниям, полученным из этой статьи, вы сможете использовать Mongoose для создания сложных запросов, извлекающих данные из вашей базы данных MongoDB.