ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 210
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Лабораторная работа №2Тема:Подготовка данных: исследование, очистка.Цель работы: Сформировать у студентов навыки создания БД в MongoDB со стандартными операциями работы с данными.План работы:
db:Кроме баз данных мы можем просмотреть список всех коллекций в текущей бд с помощью команды show collections.
Документ представляет набор пар ключ-значение. В данном случае добавляемый документ имеет три ключа: name, age, languages, и каждому из них сопоставляет определенное значение. Например, ключу languages в качесте значения сопоставляется массив.Некоторые ограничения при использовании имен ключей:
Стоит отметить, что названия ключей могут использоваться в кавычках, а могут и без кавычек.В случае удачного добавления на консоль будет выведен идентификатор добавленного документа.И чтобы убедиться, что документ в бд, мы его выводим функцией find.
По умолчанию он выводит все документы коллекции:Чтобы вывести в более читабельном виде добавим метод pretty():
Если надо добавить ряд документов, то мы можем воспользоваться методом insertMany():
После добавления консоль выводит идентификаторы добавленных документов:Есть еще один способ добавления в бд документа, который включает два этапа: определение документа (document = ( { ... } )) и собственно его добавление:
Возможно, не всем будет удобно вводить в одну строчку все пары ключей и свойств. Но интеллектуальный интерпретатор MongoDB на основе javascript позволяет также вводить и многострочные команды. Если выражение не закончено (с точки зрения языка JavaScript), и вы нажимаете Enter, то ввод следующей части выражения автоматически переносится на следующую строку:
users.js со следующим содержимым:
То есть здесь с помощью метода insertMany добавляются три документа в коллекцию users.Для загузки файла в текущую базу данных применяется функция load(), в которую в качестве параметра передается путь к файлу:
В данном случае предполагается, что файл располагается по пути "D:/users.js". Выборка из БДНаиболее простой способом получения содержимого БД представляет использование функции find. Действие этой функции во многом аналогично обычному запросу SELECT * FROM Table, который применяется в SQL и который извлекает все строки. Например, чтобы извлечь все документы из коллекции users, созданной в прошлой теме, мы можем использовать команду db.users.find().Для вывода документов в более удобном наглядном представлении мы можем добавить вызов метода pretty():
Функция find() позволяет возвратить несколько документов. Еще одна функция findOne() работает похожим образом, только возвращает один документ:
Выведем все документы, в которых name=Tom:
Такой запрос выведет нам два документа, в которых name=Tom.Теперь более сложный запрос: нам надо вывести те объекты, у которых name=Tom и одновременно age=32. То есть на языке SQL это могло бы выглядеть так: SELECT * FROM Table WHERE Name='Tom' AND Age=32. Данному критерию у нас соответствует последний добавленный объект. Тогда мы можем написать следующий запрос:
Или найдем все документы, где name="Tom", но свойство languages не определено.
Усложним запрос и получим те документы, у которых в массиве languages одновременно два языка: "english" и "german":
Причем именно в этом порядке, где "english" определен первым, а "german" - вторым.Теперь выведем все документы, в которых "english" в массиве languages находится на первом месте:
Обратите внимание, что "languages.0" предоставляет сложное свойство и поэтому берется в кавычки. Соответственно если нам надо вывести документы, где english на втором месте (например, ["german", "english"]), то вместо нуля ставим единицу: "languages.1".
Использование единицы в качестве параметра {age: 1} указывает, что запрос должен вернуть только содержание свойства age.
-
Установка и администрирование базы данных -
Работа с данными -
Работа с данными в MongoDB Compass
-
Установка и администрирование базы данных
db:Кроме баз данных мы можем просмотреть список всех коллекций в текущей бд с помощью команды show collections.
Получение статистики
Используя команду db.stats(), можно получить статистику по текущей базе данных. Например, у нас в качестве текущей установлена база данных test:Похожим образом мы можем узнать всю статистику по отдельной коллекции. Например, узнаем статистику по коллекции users: db.users.stats()-
Работа с данными
-
insertOne(): добавляет один документ -
insertMany(): добавляет несколько документов -
insert(): может добавлять как один, так и несколько документов
| 1 | > db.users.insertOne({"name": "Tom", "age": 28, languages: ["english", "spanish"]}) |
-
Символ $ не может быть первым символом в имени ключа -
Имя ключа не может содержать символ точки .
| 1 | > db.users.insertOne({"_id": 123457, "name": "Tom", "age": 28, languages: ["english", "spanish"]}) |
| 1 | > db.users.find() |
| 1 | > db.users.find().pretty() |
| 1 2 | > db.users.insertMany([{"name": "Bob", "age": 26, languages: ["english", "french"]}, {"name": "Alice", "age": 31, languages:["german", "english"]}]) |
| 1 2 | > document=({"name": "Bill", "age": 32, languages: ["english", "french"]}) > db.users.insertOne(document) |
Загрузка данных из файла
Данные для базы данных mongodb можно определять в обычном текстовом файле, что довольно удобно, поскольку мы можем переносить или пересылать этот файл независимо от базы данных mongodb. Например, определим где-нибудь на жестком диске файлusers.js со следующим содержимым:
| 1 2 3 4 5 | db.users.insertMany([ {"name": "Alice", "age": 31, languages: ["english", "french"]}, {"name": "Lene", "age": 29, languages: ["english", "spanish"]}, {"name": "Kate", "age": 30, languages: ["german", "russian"]} ]) |
| 1 | > load("D:/users.js") |
| 1 | > db.users.find().pretty() |
| 1 | > db.users.findOne() |
Фильтрация данных
Однако что, если нам надо получить не все документы, а только те, которые удовлетворяют определенному требованию. Например, мы ранее в базу добавили следующие документы:| 1 2 3 | > db.users.insertOne({"name": "Tom", "age": 28, languages: ["english", "spanish"]}) > db.users.insertOne({"name": "Bill", "age": 32, languages: ["english", "french"]}) > db.users.insertOne({"name": "Tom", "age": 32, languages: ["english", "german"]}) |
| 1 | > db.users.find({name: "Tom"}) |
| 1 | > db.users.find({name: "Tom", age: 32}) |
Фильтрация по отсутствующим свойствам
Какие-то документы могут иметь определенное свойство, другие могут его не иметь. Что если мы хотим получить документы, в которых отсутствует определенное свойство? В этом случае для свойства передается значение null. Например, найдем все документы, где отсутствует свойство languages:| 1 | > db.users.find({languages: null}) |
| 1 | > db.users.find({name: "Tom", languages: null}) |
Фильтрация по элементам массива
Также несложно отыскать по элементу в массиве. Например, следующий запрос выводит все документы, у которых в массиве languages есть english:| 1 | > db.users.find({languages: "english"}) |
| 1 | > db.users.find({languages: ["english", "german"]}) |
| 1 | > db.users.find({"languages.0": "english"}) |
Проекция
Документ может иметь множество полей, но не все эти поля нам могут быть нужны и важны при запросе. И в этом случае мы можем включить в выборку только нужные поля, использовав проекцию. Например, выведем только порцию информации, например, значения полей "age" у все документов, в которых name=Tom:| 1 | > db.users.find({name: "Tom"}, {age: 1}) |