23.06.2025

MongoDB поиск: выборка и фильтрация

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

Прежде чем мы начнем рассматривать различные методы фильтрации и выборки текста, нам необходимо развернуть сервер. Это можно сделать с помощью аренды VPS/VDS сервера в Serverspace. Найдите в левом меню облачную платформу и нажмите на кнопку Создать сервер.

Скриншот №1 — Создание сервера

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

Фильтрация и выборка в MongoDB

В MongoDB есть функция для условного поиска или выборки данных и фильтрации, это db.name_of_collection.find(). Если вы можете заметить, язык запросов очень похож на язык программирования с их классами, сущностями и методами. Также как и в языке SQL в пользовательском из MongoDB мы можем перевести наш запрос, например. Если мы запрашиваем:

db.ff_collection.find()

Скриншот №2 — Найти все документы

Запрос дословно звучит, как искать все файлы в базе данных по умолчанию в коллекции ff_collection и, очевидно, отображать их. Имейте в виду! Перед использованием любого запроса необходимо переключить базу данных командой и заменить database_name на вашу:

use database_name

Также, если вам нужно, добавьте текстовые данные для вашей базы данных и сделайте тестовые примеры с ними:

db.ff_collection.insertOne({"surname":"Garepton","occupation":"Actor","education_degree":"Finished"}
db.ff_collection.insertOne({"surname":"Gorphy","occupation":"Musician","education_degree":"Finished"})
db.ff_collection.insertOne({"surname":"Freeman","occupation":"Engineer","education_degree":"Unfinished"})

Скриншот №3 — Добавим тестовые данные

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

Скриншот №4 — Похожие функции

Для фильтрации данных нам нужно использовать функцию MongoDB find или findOne в соответствии с нашими требованиями и выбрать поле с искомым значением:

db.ff_collection.find({"surname":"Freeman"})

Скриншот №5 — Поиск по одному признаку

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

db.ff_collection.findOne({"surname":"Gorg"})

Скриншот №6 — Поиск одного файла

Как видите, мы можем указать поле со значением для поиска, и все документы будут выведены на экран. Эта функция соответствует требованиям к быстрому поиску данных в разных документах, а также поиску в сложном объекте.

Как отфильтровать два поля в MongoDB?

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

db.ff_collection.find({"education_degree":"Finished", "surname":"Gorphy"})

Скриншот №7 — Поиск по двум признакам

В первых фигурных скобках мы указываем признак для данных фильтра или можно назвать его – условие для данных поиска. И перечисляем их через запятую.

Как фильтровать значения массивов в MongoDB?

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

db.ff_collection.insertOne({"surname":"Gorg",occupation:["Dancer", "Actor"]})

Если у вас есть свои данные, то пропустите этот шаг. Мы можем выполнить поиск по одному значению в массиве с помощью команды ниже:

db.ff_collection.find({occupation:"Dancer"})

Скриншот №8 — Поиск по значению в массиве

Если у нас стоит задача поиска строгих последовательностей значений, то в запросе мы указываем соответствующий массив:

db.ff_collection.find({occupation:["Dancer","Actor"]})

Скриншот №9 — Поиск по значениям в массиве

Но если и это не удовлетворяет вашему запросу, что же делать? Мы можем использовать еще один фильтр, который поможет указать порядок или номер искомого значения в массиве, команда ниже:

db.ff_collection.find({"occupation.0" :"Dancer"})

Скриншот №10 — Поиск по значению в массиве и его порядковому номеру

Также эту команду мы можем перевести как поиск в db по умолчанию и ff_collection, массива с именем occupation и значением Dancer в первой ячейке массива. Заметьте, обычно имя массива не заключают в фигурные скобки, но этот случай исключен из общих правил, по причине сложного фильтра.

Как отфильтровать пустые значения в MongoDB?

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

db.ff_collection.find({education_degree:null})

Скриншот №11 — Поиск по значению null

В случаях, когда нам нужно найти во множестве другого файла один документ с нулевым значением и другим параметром, например surname:Gorg, команда ниже:

db.ff_collection.find({education_degree:null, "surname":"Gorg"})

Скриншот №12— Поиск по значению null и признаку

Следующий пункт поможет оптимизировать наш запрос и покажет, как отобразить указанное поле вместо всего найденного документа:

db.ff_collection.find({occupation:"Engineer"},{surname:1})

Этот запрос отображает фамилию и _id для найденного документа с условием occupation. Если вы хотите скрыть фамилию и отобразить другие документы, измените значение на surname:0. Также для скрытия _id используйте команду ниже:

db.ff_collection.find({occupation:"Engineer"},{surname:1,_id:0})

Скриншот №13— Поиск с фильтром выборки

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