Проекция в MongoDB [с примерами]

Опубликовано: 2020-09-15

MongoDB — одна из самых известных современных баз данных для обработки и управления большими данными. Это документно-ориентированная база данных NoSQL, которая использует JSON, как документы, чтобы упростить управление данными.

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

Оглавление

Что такое проекция в MongoDB?

Проекция в MongoDB ограничивает вывод данных указанными полями, а не показывает их все. Это делается с помощью метода find(). Метод find() принимает необязательный параметр, который позволяет нам включать или исключать определенные поля вывода. Давайте углубимся в то, как использовать проекцию в MongoDB .

Синтаксис метода Find()

Проекция в MongoDB производится с помощью метода find(), синтаксис которого таков:

дБ. имя_коллекции .find({}, { field_Key:1 или 0 })

В приведенном выше синтаксисе имя_коллекции — это документ, из которого нам нужно получить данные. Затем в методе find() есть два параметра — первый принимает запрос, а второй используется для проекции. field_Key в синтаксисе — это имя поля, которое мы хотим включить или исключить.

Нам нужно передать логическое значение для каждого field_Key . Это значение определяет, хотим ли мы включить поле или исключить его. Если мы введем 1 в поле, оно будет показано в результатах, а если мы включим 0, оно будет скрыто.

Пример базы данных

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

db.example.studentData([

{_id: ObjectId("59kf63795bc1d"), student_name: "Александр", student_id: 01, student_status: "A", student_age: 22}

{_id: ObjectId("59ke62794bc1d"), student_name: "Стив", student_id: 02, student_status: "A", student_age: 23}

{_id: ObjectId("59kg73795bf1e"), student_name: "Люк", student_id: 03, student_status: "A", student_age: 21}

{_id: ObjectId("59kb69995ah1d"), student_name: "Браво", student_id: 04, student_status: "B", student_age: 25}

])

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

Получение данных с проекцией и без в MongoDB

1. Синтаксис получения без проекции

Получение всех полей (как не использующих проекцию) студентов со student_status: «A».

db.example.find({student_status: «A»})

Это соответствует запросу Select * from example WHERE student_status = «A» в SQL. Получение данных без проекции в MongoDB даст следующий результат:

{"_id": ObjectId("59kf63795bc1d"), "student_name": "Александр", "student_id": 01, "student_status": "A", student_age: 22}

{"_id": ObjectId("59ke62794bc1d"), "student_name": "Стив", "student_id": 02, "student_status": "A", "student_age": 23}

{“_id”: ObjectId(“59kg73795bf1e”), “student_name”: “Люк”, “student_id”: 03, “student_status”: “A”, student_age: 21}

По умолчанию отображаются все поля данных, где student_status = «A». Чтобы ограничить поля вывода, мы можем использовать проекцию в MongoDB .

2. Синтаксис получения с проекцией

Получение student_name и student_status всех студентов.

db.example.find({}, {имя_ученика: 1, статус_студента: 1})

Это покажет следующий результат:

{"_id": ObjectId("59kf63795bc1d"), "student_name": "Александр", "student_status": "A"}

{"_id": ObjectId("59ke62794bc1d"), "student_name": "Стив", "student_status": "A"}

{“_id”: ObjectId(“59kg73795bf1e”), “student_name”: “Luke”, “student_status”: “A”}

{"_id": ObjectId("59kb69995ah1d"), student_name: "Браво", student_status: "B"}

_id отображается по умолчанию при использовании проекции в MongoDB , если мы не отключим его.

Подавление _id при использовании проекции в MongoDB

Подавление _id по умолчанию и отображение student_id, student_name и student_status всех студентов.

db.example.find({}, {_id: 0, student_id: 1, student_name: 1, student_status: 1})

Это даст следующий результат:

{"student_id": 01, "student_name": "Александр", "student_status": "A"}

{"student_id": 02, "student_name": "Стив", "student_status": "A"}

{"student_id": 03, "student_name": "Люк", "student_status": "A"}

{"student_id": 04, "student_name": "Браво", student_status: "B"}

3. Сочетание включения и исключения

Исключая _id и student_id, включая student_name и student_status всех студентов.

db.example.find({}, {_id: 0, student_id: 0, student_name: 1, student_status: 1})

Это даст следующий результат:

Ошибка: ошибка: {

«жданнаяМС»: NumberLong(0),

«хорошо»: 0,

«errmsg» : ​​«Проекция не может иметь сочетание включения и исключения.»,

"код": 2

}

Сочетание включения и исключения при использовании проекции MongoDB приведет к ошибке, поскольку мы не можем выполнить оба в одном запросе. Поле _id является исключением из этого правила.

Вы могли заметить, что мы использовали комбинацию включения и исключения в нашем предыдущем примере, где мы подавили _id и показали некоторые другие поля, и это сработало нормально. Из-за исключения из правила мы исключили _id и включили остальные поля.

4. Указание проекции в MongoDB путем исключения

Исключая _id и student_status всех студентов и показывая другие поля.

db.example.find({}, {_id: 0, student_status: 0})

{"student_name": "Александр", "student_id": 01, "student_age": 22}

{"student_name": "Стив", "student_id": 02, "student_age": 23}

{"student_name": "Люк", "student_id": 03, "student_age": 21}

{"student_name": "Браво", "student_id": 04, "student_age": 25}

Вы также можете использовать четыре оператора проекции для ограничения полей вывода, но они не поддерживаются методом find(). Можно использовать следующие операторы проецирования: $, $elemMatch, $slice и $meta.

Читайте также: Примеры использования MongoDB в реальном мире

Заключение

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

Поэтому сейчас самое время включить навыки работы с MongoDB в свое резюме. Но с другой стороны, в сегодняшнем конкурентном мире недостаточно только управления базой данных. Следовательно, было бы полезно, если бы вы стремились стать разработчиком полного стека или изучать бизнес-аналитику, чтобы понимать и анализировать данные, которыми вы управляете, и помогать бизнесу работать хорошо. upGrad может помочь вам начать работу.

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

Изучайте онлайн-курсы по разработке программного обеспечения в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

Возглавьте технологическую революцию, основанную на данных

Расширенная программа сертификации в области больших данных от IIIT Bangalore