Файл: Подготовка данных исследование, очистка.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.01.2024

Просмотров: 46

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


1

> db.users.find ({age: {$gt : 30, $lt: 50}})

Найдем пользователей, возраст которых равен 22:

1

> db.users.find ({age: {$eq : 22}})

По сути это аналогия следующего запроса:

1

> db.users.find ({age: 22})

Обратная операция - найдем пользователей, возраст которых НЕ равен 22:

1

> db.users.find ({age: {$ne : 22}})

Оператор $in определяет массив возможных выражений и ищет те ключи, значение которых имеется в массиве:

1

> db.users.find ({age: {$in : [22, 32]}})

Противоположным образом действует оператор $nin - он определяет массив возможных выражений и ищет те ключи, значение которых отсутствует в этом массиве:

1

> db.users.find ({age: {$nin : [22, 32]}})

Логические операторы


Логические операторы выполняются над условиями выборки:

  • $or: соединяет два условия, и документ должен соответствовать одному из этих условий

  • $and: соединяет два условия, и документ должен соответствовать обоим условиям

  • $not: документ должен НЕ соответствовать условию

  • $nor: соединяет два условия, и документ должен НЕ соответстовать обоим условиям

Оператор $or


Оператор $or представляет логическую операцию ИЛИ и определяет набор пар ключ-значение, которые должны иметься в документе. И если документ имеет хоть одну такую пару ключ-значение, то он соответствует данному запросу и извлекается из бд:

1

> db.users.find ({$or : [{name: "Tom"}, {age: 22}]})

Это выражение вернет нам все документы, в которых либо name=Tom, либо age=22.

Другой пример вернет нам все документы, в которых name=Tom, а age равно либо 22, либо среди значений languages есть "german":

1

> db.users.find ({name: "Tom", $or : [{age: 22}, {languages: "german"}]})

В подвыраженях or можно применять условные операторы:

1

> db.users.find ({$or : [{name: "Tom"}, {age: {$gte:30}}]})


В данном случае мы выбираем все документы, где name="Tom" или поле age имеет значение от 30 и выше.

Оператор $and


Оператор $and представляет логическую операцию И (логическое умножение) и определяет набор критериев, которым обязателньо должен соответствовать документ. В отличие от оператора $or документ должен соответствовать всем указанным критериям. Например:

1

> db.users.find ({$and : [{name: "Tom"}, {age: 32}]})

Здесь выбираемые документы обязательно должны имееть имя Tom и возраст 32 - оба этих признака.

Поиск по массивам


Ряд операторов предназначены для работы с массивами:

  • $all: определяет набор значений, которые должны иметься в массиве

  • $size: определяет количество элементов, которые должны быть в массиве

  • $elemMatch: определяет условие, которым должны соответствовать элемены в массиве

$all


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

1

> db.users.find ({languages: {$all : ["english", "french"]}})

Оператор $elemMatch


Оператор $elemMatch позволяет выбрать документы, в которых массивы содержат элементы, попадающие под определенные условия. Например, пусть в базе данных будет коллекция, которая содержит оценки пользователей по определенным курсам. Добавим несколько документов:

1

2

> db.grades.insertMany([{student: "Tom", courses:[{name: "Java", grade: 5}, {name: "MongoDB", grade: 4}]},

{student: "Alice", courses:[{name: "C++", grade: 3}, {name: "MongoDB", grade: 5}]}])

Каждый документ имеет массив courses, который в свою очередь состоит из вложенных документов.

Теперь найдем студентов, которые для курса MongoDB имеют оценку выше 3:

1

> db.grades.find({courses: {$elemMatch: {name: "MongoDB", grade: {$gt: 3}}}})

Оператор $size


Оператор $size используется для нахождения документов, в которых массивы имеют число элементов, равным значению $size. Например, извлечем все документы, в которых в массиве laguages два элемента:



1

> db.users.find ({languages: {$size:2}})

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

1

{"name": "Tom", "age": 32, languages: ["english", "german"]}

Оператор $exists


Оператор $exists позволяет извлечь только те документы, в которых определенный ключ присутствует или отсутствует. Например, вернем все документы, в который есть ключ company:

1

> db.users.find ({company: {$exists:true}})

Если мы укажем у оператора $exists в качестве параметра false, то запрос вернет нам только те документы, в которых не определен ключ company.

Оператор $type


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

1

2

> db.users.find ({age: {$type:"string"}})

> db.users.find ({age: {$type:"number"}})

Оператор $regex


Оператор $regex задает регулярное выражение, которому должно соответствовать значение поля. Например, пусть поле name обязательно имеет букву "b":

1

> db.users.find ({name: {$regex:"b"}})

Важно понимать, что $regex принимает не просто строки, а именно регулярные выражения, например: name: {$regex:"om$"} - значение name должно оканчиваться на "om".


  1. Работа с данными в MongoDB Compass

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


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


Но несмотря на наличие графических возможностей для управления данными, они могут оказаться недостаточными для каких-то более сложных сценариев работы с данными. И для этого в MongoDB Compass есть встроенный консольный клиент 
Mongosh, в котором можно вводить почти все те же команды для работы с данными, что и в консольной оболочке mongo:

Но также стоит отметить, что консольный клиент в Compass несколько упрощает написание запросов. Прежде всего, можно копировать и вставлять запросы в mongosh. Также mongosh имеет функцию автодополнения, которая позволяет нам предложить варианты доступых функций: