Проекция в MongoDB [с примерами]
Опубликовано: 2020-09-15MongoDB — одна из самых известных современных баз данных для обработки и управления большими данными. Это документно-ориентированная база данных 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, чтобы ускорить свою карьеру.
