Mongodb

Введение

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

Понять базу данных администратора

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

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

Upsert метод

upsert это игра слов от update and insert — upsert, обновление и вставка. Когда у нас уже был выполнен запрос в базу и мы знаем, что нам нужно поменять мы можем изменить выбранный из базы объект и вставить его заново. Рассмотрим следующий код:

// Проверяем существует ли документ с таким urllet blog = db.analytics.findOne({ url : "/blog" })// Если существует то добавим просмотр и сохраним с помощью метода коллекции saveif (blog) {  blog.pageviews++;  db.analytics.save(blog);}// иначе создать новый документelse {  db.analytics.insertOne({url : "/blog", pageviews : 1})}

— это один из методов для поиска, он вернет нам совпадающий документ если он есть в коллекции. Метод коллекции , просто смотрит на документ, если в нем есть _id, то он обновляет этот документ на новый. На самом деле это не очень хороший подход, если задуматься, что этот код будет работать в несколько процессов, то когда мы считаем данные в переменную blog, то если у нас после этого будет какой то объемный код с проверками и вставками, то в другом потоке, код может изменить существующие данные, но мы их не получим, потому что мы работаем с переменной blog, и можем случайно затереть новые данные. Это называется состояние гонки памяти. Чтобы этого избежать мы можем используя подход upsert, сделать это через или добавив в 3 параметр свойство upsert: true, следующим образом.

db.analytics.updateOne({ "url" : "/blog" }, {...    $inc : { pageviews : 1}...  }, {"upsert" : true})

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

Устройство базы данных. Документы

Последнее обновление: 07.08.2021

Всю модель устройства базы данных в MongoDB можно представить следующим образом:

Если в реляционных бд содержимое составляют таблицы, то в mongodb база данных состоит из коллекций.

Каждая коллекция имеет свое уникальное имя — произвольный идентификатор, состоящий из не более чем 128 различных алфавитно-цифровых символов и знака подчеркивания.

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

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

{
    "name": "Tom",
    "surname": "Smith",
    "age": "37",
	"company": {
        "name" : "Microsoft",
        "salary" : "100"
    }
}

Документ представляет набор пар ключ-значение. Например, в выражении «name» представляет ключ, а «Tom» — значение.

Ключи представляют строки. Значения же могут различаться по типу данных. В данном случае у нас почти все значения также представляют строковый тип,
и лишь один ключ (company) ссылается на отдельный объект. Всего имеется следующие типы значений:

  • String: строковый тип данных, как в приведенном выше примере (для строк используется кодировка UTF-8)
  • Array (массив): тип данных для хранения массивов элементов
  • Binary data (двоичные данные): тип для хранения данных в бинарном формате
  • Boolean: булевый тип данных, хранящий логические значения или ,
    например,
  • Date: хранит дату в формате времени Unix
  • Double: числовой тип данных для хранения чисел с плавающей точкой
  • Integer: используется для хранения целочисленных значений размером 32 бита, например,
  • Long: используется для хранения целочисленных значений размером 64 бита
  • JavaScript: тип данных для хранения кода javascript
  • Min key/Max key: используются для сравнения значений с наименьшим/наибольшим элементов BSON
  • Null: тип данных для хранения значения
  • Object: строковый тип данных, как в приведенном выше примере
  • ObjectId: тип данных для хранения id документа
  • Regular expression: применяется для хранения регулярных выражений
  • Decimal128: тип данных для хранения десятичных дробных чисел размером 128 бит, которые позволяют решить проблемы с проблемой точности вычислений
    при использовании дробных чисел, которые представляют тип Double.
  • Timestamp: применяется для хранения времени

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

{
    "name": "Bob",
    "birthday": "1985.06.28",
	"place" : "Berlin",
	"languages" :
}

Казалось бы разные объекты за исключением отдельных свойств, но все они могут находиться в одной коллекции.

Еще пара важных замечаний: в MongoDB запросы обладают регистрозависимостью и строгой типизацией. То есть следующие два документа не будут
идентичны:

{"age" : "28"}
{"age" : 28}

Если в первом случае для ключа age определена в качестве значения строка, то во втором случае значением является число.

Идентификатор документа

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

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

Если идентификатор не задан явно, то MongoDB создает специальное бинарное значение размером 12 байт. Это значение состоит из нескольких
сегментов: значение типа размером 4 байта (которое представляет количество секунд с момента начала эпохи Unix),
случайное число из 5 байт и счетчик из 3 байт, который инициализирован случайным числом.
Такая модель построения идентификатора гарантирует с высокой долей вероятности, что он будет иметь уникальное значение.

НазадВперед

Условные операторы в MongoDB

  • $gt (больше чем)
  • $lt (меньше чем)
  • $gte (больше или равно)
  • $lte (меньше или равно)
  • , который извлекает все документы, не соответствующие некоторому условию
 db.users.find ({age: {$in : }})  $in определяет массив возможных выражений
 db.users.find ({age: {$in : }})  $nin — он определяет массив возможных выражений и ищет те ключи, значение которых отсутствует в этом массиве:
 db.users.find ({age: {$all : }})

db.users.find ({languages: {$all : }})

 $all — требует, чтобы документы имели весь определяемый набор выражений
 db.users.find ({$or : })

db.users.find ({name: «Tom», $or : })

 $or определяет набор пар ключ-значение, которые должны иметься в документе
  1. либо name=Tom, либо age=22
  2. в которых name=Tom, а age равно либо 22, либо среди значений languages есть «german»:
 db.users.find ({languages: {$size:2}})  документов, в которых массивы имеют число элементов, равным значению $size
 db.users.find ({company: {$exists:true}})  $exists — только те документы, в которых определенный ключ присутствует или отсутствует
 db.users.find ({name: {$regex:»b»}})  $regex задает регулярное выражение, которому должно соответствовать значение поля

При возникновении проблемы невозможности скопировать базу данных с помощью инструментов визуализации MongoDB (таких как Robo 3T), как сделать резервную копию и восстановить базу данных?

Когда мы хотим скопировать все данные из определенной среды (например, тестовой) в другую среду (например, локальную), если на компьютере установлен только бесплатный инструмент визуализации MongoDB, например Robo 3T, потому что Похоже, что Robo 3T не поддерживает копирование базы данных, поэтому сейчас нам следует подумать о другом способе. Давайте рассмотрим полную демонстрацию того, как сделать резервную копию и восстановить базу данных в этой ситуации. Если у вас есть лучший метод, вы можете оставить сообщение в области сообщений. Я дополню и улучшу его позже.

метод первый:

Существует два основных типа резервного копирования и восстановления базы данных mongodb, один из которыхПротив библиотекиMongodump и mongorestore, один из нихДля столов в библиотекеМонгоэкспорт и монгоимпорт.Примечания: обязательно обратите вниманиеКоманды операционной библиотеки и операционной таблицы разные., Он потерпит неудачу, если вы сделаете ошибку. Общий формат команд базы данных резервного копирования mongodump:

Общий формат команд базы данных резервного копирования mongodump:

среди них,

Здесь я использую командную строку git для резервного копирования базы данных, пример следующий.

Метод второй:

Если вы хотите скопировать базу данных в тестовую среду, но протокол, которому следует база данных, не является HTTP (например, SSH), то указанный выше метод не будет работать в настоящее время, в этом случаеСначала войдите на тестовый сервер, выполните mongodump в контейнере докеров mongodb на сервере, а затем скопируйте файл на локальный. Конкретные шаги заключаются в следующем:1. Войдите на тестовый сервер (выполните команду ssh для удаленного подключения к тест-серверу) Откройте любой инструмент оболочки, я использую здесь оболочку bash, введите следующую команду:

Среди них замените ключевой файл на свой собственный путь к файлу закрытого ключа. Файл закрытого ключа можно найти, просмотрев конфигурацию базы данных, например, открыв Robo 3T и просмотрев конфигурацию.2. Выполните следующую команду, войдите в контейнер докеров и найдите контейнер докеров с именем mongodb на тестовом сервере (чтобы найти точное имя контейнера mongodb, мой называется mongodb, и вы можете настроить его в соответствии с вашей реальной ситуацией)

Затем выполните следующую команду, чтобы войти в контейнер mongodb (все команды, выполненные впоследствии, будут выполняться в контейнере mongodb, что эквивалентно удаленному подключению к виртуальной машине)

3. Выполните команду mongodump в контейнере mongodb, чтобы экспортировать данные в каталог тома, к которому можно получить доступ извне.Команда mongodump принимает — archive = / dump.data для упаковки результатов экспорта в один файл dump.data, который удобно передавать на локальный. /Dump.data здесь означает файл dump.data в корневом каталоге контейнера mongodb

После выполнения команды вернитесь в корневой каталог контейнера mongodb и выполните команду просмотра файла ls. Если в списке файлов есть dump.data, экспорт успешен.4. Используйте такие инструменты, как ssh или FileZila, чтобы скопировать файлы на тестовом сервере с сервера на локальный. Сначала выйдите из контейнера, выполните команду exit напрямую, выйдите из оболочки, а затем выйдите из контейнера.

Теперь среда командной строки снова переключается на тестовый сервер, выполните docker cp, чтобы скопировать файлы из контейнера на хост-машину (то есть на тестовый сервер).Пример выглядит следующим образом: Скопируйте dump.data из корневого каталога контейнера mongodb в корневой каталог хоста и сохраните то же имя файла

Вернитесь в корневой каталог тестового сервера (введите команду cd /), введите команду просмотра файла ls, и вы увидите только что скопированный файл. Затем выполните команду выхода, чтобы выйти из тестового сервера.

5. Используйте команду scp, чтобы получить скопированные файлы с тестового сервера.

Затем проверьте свой локальный путь и получите файл, который хотите получить5. Выполните команду mongodbrestore локально, чтобы восстановить базу данных. восстановить файлы, зарезервированные локально, в библиотеку mongodb, — archive == xxx — это указанный входной файл

Значит, в местной библиотеке mongodb есть данные!

Резервное копирование определенной коллекции и конкретной базы данных с помощью mongodump

Если вы хотите сделать резервную копию определенной базы данных и определенной коллекции с помощью команды mongodump, вы можете указать —db и —collection в качестве параметров для mongodump.

Здесь, в приведенном ниже примере, наша база данных — myinfo, а collection — userdetails.

Приведенная выше операция создаст дамп коллекции с именем userdetails из базы данных myinfo в подкаталоге dump / текущего рабочего каталога. Вот вывод

NB. Команда mongodump перезаписывает выходные файлы, если они уже существуют в папке данных резервного копирования. Таким образом, лучше убедиться, что вам больше не нужны файлы в выходной папке или вы взяли копию предыдущей резервной папки, прежде чем запускать команду mongodump несколько раз.

Установка

На странице MongoDB Community Downloads смотрим стабильные версии программного продукта. На момент обновления инструкции это была 4.4.

Обратите внимание, установка MongoDB возможна на большое число популярных операционных систем — Amazon, Debian, Ubuntu, macOS, CentOS, Red Hat, Windows и другие. Переходим на страницу загрузки ключей для проверки подлинности репозитория

Копируем ссылку для версии MongoDB, которую мы планируем установить:

Переходим на страницу загрузки ключей для проверки подлинности репозитория. Копируем ссылку для версии MongoDB, которую мы планируем установить:

* в данном примере мы скопировали ссылку на ключ для версии 4.4

Обратите внимание, что также есть возможность загрузки ключей для более свежих и менее стабильных версий

С помощью скопированной ссылки скачиваем и устанавливаем ключ:

wget -qO — https://www.mongodb.org/static/pgp/server-4.4.asc | sudo apt-key add —

Создаем файл для настройки репозитория Ubuntu:

vi /etc/apt/sources.list.d/mongodb-org.list

Добавляем строку:

deb https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse

* focal — название релиза Ubuntu. В данном примере, версия 20.04. На данный момент возможны варианты:

  • focal: 20.04.
  • bionic: 18.04.
  • xenial: 16.04.

Обновляем список пакетов:

apt-get update

Устанавливаем MongoDB:

apt-get install mongodb-org

Стартуем сервис и разрешаем его автозапуск:

systemctl start mongod

systemctl enable mongod

Для подключения к СУБД вводим команду:

mongo

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

> show databases;

После первой установки мы должны увидеть следующее:

admin   0.000GB
config  0.000GB
local   0.000GB

В качестве примера работы мы можем попробовать создать новую базу данных и коллекцию. Объекты в MongoDB создаются автоматически при первом к ним обращении.

Для создания базы просто обращается к ней:

> use newDB

* в данном примере будут создана база newDB.

Для создания коллекции, выполняем команду на вставку данных:

> db.newCollection.insertOne( { x: 1 } )

Выходим из оболочки SQL:

> exit

Установка завершена.

Создайте учетную запись администратора

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

  • В базе данных администратора добавьте пользователя и дайтеРоли,Только вДоступно в базе данных, предоставляя пользователям права userAdmin для всех баз данных.

Например, следующее создается в базе данных администратора с именемпользователь.

Использование массивов как коллекций

Мы можем использовать массив как коллекцию и добавлять только те элементы которых еще нет в коллекции. Это делается с помощью модификатора или . Например если мы хотим добавить автора в список авторов цитат, только если его еще там нет, то мы можем написать следующие:

> db.papers.updateOne({ "authors cited" : {"$ne" : "Richie"}},... {$push : {"authors cited" : "Richie"}})

Обратите внимание здесь мы ищем не по id, а по полю authors cited, которое в свою очередь будет массивом в документе, в массиве не должно быть поля Richie. И только в том случае мы можем добавить автора в список

Оператор выглядит более скромно:

> db.users.updateOne({"_id" : ObjectId("4b2d75476cc613d5ee930164")},... {"$addToSet" : {"emails" : "[email protected]"}})

И здесь мы можем просто добавить элемент если его нет. Используют разные операторы в разных ситуациях.

Основы

mongod.exe Запуск сервера MongoDB
mongod.exe -dbpath E:\mongodata при запуске можно задать каталог для баз данных
mongo.exe после удачного запуска сервера мы сможем производить операции с бд через оболочку
Создание коллекции и объекта в ней
вывод содержимого коллекции
use info установить нужную нам базу данных в качестве текущей
show dbs вывести названия всех имеющихся бд
db узнать, какая бд используется в текущей момент
show collections просмотреть список всех коллекций в текущей бд

Добавление данных и создание коллекций

db.users.insert ({«name»: «Tom», «age»: 28, languages: }) Для вставки в коллекцию используется функция insert
document=({«name»: «Bill», «age»: 32, languages: })

db.users.insert(document)

Некоторые ограничения при использовании имен ключей:
  • Символ  не может быть первым символом в имени ключа
  • Имя ключа не может содержать символ точки 
  •  не рекомендуется использовать
db.users.profiles и db.users.accounts Для упрощения организации данных в коллекциях мы можем использовать подколлекции. они не будут никак связаны с коллекцией users
db.users.renameCollection(«новое_название») Переименование коллекции
db.createCollection(name, options) Явное создание коллекции

Ограниченные коллекции

когда в коллекции уже нет места, наиболее старые документы удаляются, и в конец добавляются новые данные. Когда в коллекции уже нет места, наиболее старые документы удаляются, и в конец добавляются новые данные. если все место под коллекцию заполнено (например, выделенные нами 9500 байтов), а количество документов еще не достигло максимума, в данном случае 150, то в этом случае при добавлении нового документа самый старый документ будет удаляться, а на его место будет вставляться новый документ.

db.createCollection(«profile», {capped:true, size:9500}) создадим ограниченную коллекцию с названием profile и зададим для нее размер в 9500 байт
db.createCollection(«profile», {capped:true, size:9500, max: 150}) ограничить количество документов в коллекции, указав его в параметре max. если все место под коллекцию заполнено (например, выделенные нами 9500 байтов), а количество документов еще не достигло максимума, в данном случае 150, то в этом случае при добавлении нового документа самый старый документ будет удаляться, а на его место будет вставляться новый документ.

Запуск MongoDB

Мы можем запустить сервер MongoDB с помощью следующей команды:

Shell

sudo mongod —config /usr/local/mongodb/mongod.conf

1 sudo mongod—config/usr/local/mongodb/mongod.conf

Обратите внимание, если вы не укажите опцию —config, по умолчанию dbpath будет установлен в /data/db.
При запуске сервера, если все хорошо, вы должны увидеть примерно следующее:

Shell

sudo mongod —config /usr/local/mongodb/mongod.conf
Sat Sep 10 15:46:31 MongoDB starting : pid=14914
port=27017 dbpath=/usr/local/var/mongodb 64-bit
Sat Sep 10 15:46:31 db version v2.0.2, pdfile version 4.5
Sat Sep 10 15:46:31 git version:
c206d77e94bc3b65c76681df5a6b605f68a2de05
Sat Sep 10 15:46:31 build sys info: Darwin erh2.10gen.
cc 9.6.0 Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008;
root:xnu-1228.9.59~1/RELEASE_I386 i386 BOOST_LIB_VERSION=1_40
Sat Sep 10 15:46:31 journal dir=/usr/local/var/mongodb/
journal
Sat Sep 10 15:46:31 recover : no journal files present,
no recovery needed
Sat Sep 10 15:46:31 waiting for connections on port 27017
Sat Sep 10 15:46:31 web admin interface listening on port 28017

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

sudo mongod—config/usr/local/mongodb/mongod.conf

Sat Sep10154631initandlistenMongoDB startingpid=14914

port=27017dbpath=/usr/local/var/mongodb64-bit

Sat Sep10154631initandlistendb version v2.0.2,pdfile version4.5

Sat Sep10154631initandlistengit version

c206d77e94bc3b65c76681df5a6b605f68a2de05

Sat Sep10154631initandlistenbuild sys infoDarwin erh2.10gen.

cc9.6.0Darwin Kernel Version9.6.0Mon Nov24173700PST2008;

rootxnu-1228.9.59~1/RELEASE_I386 i386 BOOST_LIB_VERSION=1_40

Sat Sep10154631initandlistenjournal dir=/usr/local/var/mongodb/
journal

Sat Sep10154631initandlistenrecoverno journal files present,

no recovery needed

Sat Sep10154631initandlistenwaiting forconnections on port27017

Sat Sep10154631websvrweb admin interfacelistening on port28017

Кратко, что значат эти записи:

  • Сервер запущен с pid 14914 на порту 27017 (порт по умолчанию)
  • Версия MongoDB сервера — 2.0.2
  • Путь к файлу журналов  /usr/local/var/mongodb/journal
  • Web админ консоль запущена на 28017 порту

Есть много параметров командной строки, которые позволяют нам использовать MongoDB различными способами.
Например:

  • —jsonp разрешает JSONP доступ.
  • —rest включает REST API.
  • Master/Slave, варианты репликации, параметры совместного доступа.

Экспорт в формате CSV с использованием файла, содержащего список полей

Вы также можете указать поля в файле, содержащем список полей, разделенных строками, для экспорта и использовать этот файл .txt вместе с параметром —fieldFile в команде mongoexport.

Вот файл myfields.txt, как показано ниже. Откройте редактор блокнота и напишите следующий текст, только одно поле в одной строке, затем сохраните файл под нужным именем в папке / mondodb / bin / и используйте это имя в команде. Здесь наше имя файла myfields.txt, и мы использовали это имя.

Вот команда

Вот вывод

 D: / mongodb / bin> mongoexport --db myinfo --collection userdetails --csv --fieldFile myfields.txt --out /backup_data/backup/userdetails.csv
подключен к: 127.0.0.1
экспортировано 1 записей

Как создать базу данных в MongoDB

Этот раздел состоит из нескольких шагов, которые необходимо выполнить для создания базы данных в MongoDB. Внимательно следуйте инструкциям:

Вывод приведенной выше команды показывает, что служба MongoDB активна и работает:

После этого войдите в оболочку mongo, используя указанную ниже команду в вашем терминале Ubuntu:

Шаг 2. Найдите существующие базы данных

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

Или:

Как видно из выходных данных, в настоящее время на борту есть три базы данных: замечено, что это встроенные базы данных.

Шаг 3. Создайте новую базу данных

Чтобы создать новую базу данных с помощью оболочки mongo; вы должны следовать правильному синтаксису, как указано ниже:

Следуя приведенному выше синтаксису; мы создали новую базу данных » linuxhint » с помощью следующей команды оболочки mongo:

Поскольку мы создали только пустую базу данных; Итак, система не покажет его, пока мы не вставим в него данные:

Шаг 4: Активируйте базу данных

Активировать базу данных » linuxhint «; для этого мы будем использовать следующий синтаксис:

» Db » здесь относится к выбранной базе данных; » Коллекция » — это имя документа, который вы вставляете;

» ({}) » Содержит данные для вставки.

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

Или вы можете подключиться к базе данных MongoDB прямо из терминала Ubuntu; используйте следующую команду в терминале для подключения к базе данных » linuxhint «:

Следуя синтаксису, мы использовали указанную ниже команду для создания нового пользователя с именем » jack «, его обозначением и возрастом.

Примечание. После успешного выполнения команды; он покажет вывод » WriteResult ({» nInserted «: 1}) »:

После вставки документа в » linuxhint » убедитесь, что » linuxhint » добавлен в список баз данных или нет: для этого выполните следующую команду в оболочке mongo:

Команды группировки

  db.users.count()  число элементов в коллекции
 db.users.find({name: «Tom»}).count()  сколько определенных документов
 db.users.distinct(«name») только уникальные различающиеся значения для одного из полей документа

Группировка и метод group

аналогично применению выражения GROUP BY в SQL

Использование метода аналогично применению выражения в SQL. Метод group принимает три параметра:

  • key: указывает на ключ, по которому надо проводить группировку
  • initial: представляет базовое значение для сгруппированного результата
  • reduce: представляет функцию, возвращающую количество элементов. Эта функция принимает в качестве аргументов два параметра: и
  • keyf: необязательный параметр. Используется вместо параметра key и представляет функцию, которая возвращает объект key
  • cond: необязательный параметр. Представляет собой условие, которое должно возвращать true, иначе документ не примет участия в группировке. Если данный параметр неуказан, то в группировке участвуют все документы
  • finalize: необязательный параметр. Представляет функцию, которая срабатывает перед тем, как будут возвращены результаты группировки.

Резервное копирование базы данных и коллекции MongoDB с использованием экспорта в формате CSV

Данные MongoDB можно экспортировать с помощью команды mongoexport. Команда mongoexport подключается к экземпляру mongod, который работает на локальном порту с номером 27017.

Здесь в приведенном ниже примере экспортируются данные из коллекции userdetails, которая находится в базе данных myinfo в формате CSV, в файл D: /backup_data/backup/userdetails.csv.

Когда вы экспортируете в формате CSV, вы должны указать поля в документах для экспорта, а в приведенном ниже примере конкретными полями являются user_id, образование и интерес.

Вот вывод

 D: / mongodb / bin> mongoexport --db myinfo --коллекция userdetails --csv --fields user_id, образование, интересы --out /opt/backups/userdetails.csv
подключен к: 127.0.0.1
экспортировано 1 записей

Вы можете открыть этот файл в Excel. Вот файл, отображаемый в каталоге упоминаний, и данные, экспортированные в формате .csv.

MongoDB Backup

Резервное копирование базы данных с mongodump

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

Когда mongodump работает только без каких-либо аргументов, команда подключается к экземпляру MongoDB в локальной системе (например, localhost) через порт 27017 и создает резервную копию базы данных с именем dump / в текущем каталоге.

Вот команда для резервного копирования данных с экземпляра mongod или mongos, работающего на той же машине и с портом по умолчанию 27017.

Чтобы сделать резервную копию, вы должны ввести каталог bin в папку mongodb на вашем компьютере. Здесь наш путь D: / mongodb / bin, и вы должны выполнить команду отсюда.

Вот вывод

 D: / MongoDB / бен> mongodump
подключен к: 127.0.0.1
2015-04-24T16: 12: 38,401 + 0530 все дб
2015-04-24T16: 12: 38.402 + 0530 БАЗА ДАННЫХ: myinfo to dump / myinfo
2015-04-24T16: 12: 38.403 + 0530 myinfo.system.indexes для дампа / myinfo / system.indexes.bson
2015-04-24T16: 12: 38,404 + 0530 1 документов
2015-04-24T16: 12: 38.404 + 0530 myinfo.userdetails для дампа / myinfo / userdetails.bson
2015-04-24T16: 12: 38,406 + 0530 1 документ
2015-04-24T16: 12: 38.406 + 0530 Метаданные для myinfo.userdetails для сброса / myinfo / userdetails.metadata.json
2015-04-24T16: 12: 38.408 + 0530 БАЗА ДАННЫХ: тест для сброса / тест
2015-04-24T16: 12: 38.409 + 0530 test.system.indexes to dump / test / system.indexes.bson
2015-04-24T16: 12: 38,410 + 0530 1 документ
2015-04-24T16: 12: 38.410 + 0530 test.userdetails для создания дамп / test / userdetails.bson
2015-04-24T16: 12: 38,411 + 0530 1 документ
2015-04-24T16: 12: 38.412 + 0530 Метаданные для test.user - подробности для дампа / test / userdetails.metadata.json
2015-04-24T16: 12: 38.413 + 0530 БАЗА ДАННЫХ: администратор для дампа / администратор

Для резервного копирования базы данных с помощью mongodump укажите —host и —port

Здесь, в приведенном ниже примере, хост — это mypc-PC, а порт — это порт по умолчанию 27017.

Вот вывод

 D: / mongodb / bin> mongodump --host mypc-PC --port 27017
подключен к: bidhan-ПК: 27017
2015-04-25T10: 49: 53,994 + 0530 все дб
2015-04-25T10: 49: 53.997 + 0530 БАЗА ДАННЫХ: myinfo to dump / myinfo
2015-04-25T10: 49: 53.998 + 0530 myinfo.system.indexes для дампа / myinfo / system.indexes.bson
2015-04-25T10: 49: 53,999 + 0530 1 документов
2015-04-25T10: 49: 54.000 + 0530 myinfo.userdetails для дампа / myinfo / userdetails.bson
2015-04-25T10: 49: 54.000 + 0530 1 документов
2015-04-25T10: 49: 54.001 + 0530 Метаданные для myinfo.userdetails для дампа / myinfo / userdetails.metadata.json
2015-04-25T10: 49: 54.002 + 0530 БАЗА ДАННЫХ: тест для сброса / тест
2015-04-25T10: 49: 54.005 + 0530 test.system.indexes to dump / test / system.indexes.bson
2015-04-25T10: 49: 54.006 + 0530 1 документ
2015-04-25T10: 49: 54.007 + 0530 test.userdetails для создания дамп / test / userdetails.bson
2015-04-25T10: 49: 54.009 + 0530 1 документ
2015-04-25T10: 49: 54.009 + 0530 Метаданные для test.user - детали для сброса / test / userdetails.metadata.json
2015-04-25T10: 49: 54.011 + 0530 БАЗА ДАННЫХ: администратор для дампа / администратор

NB. Команда mongodump перезаписывает выходные файлы, если они уже существуют в папке данных резервного копирования. Таким образом, лучше убедиться, что вам больше не нужны файлы в выходной папке или вы взяли копию предыдущей резервной папки, прежде чем запускать команду mongodump несколько раз.

Добавления элементов

Оператор помогает добавить элемент в конец массива. К примеру у нас есть документ:

{  _id : ObjectId("4b2d75476cc613d5ee930164"),  title : "A blog post",  content : "..."}

И мы хотим добавить контент в массив, которого нет, документ комментарий.

> db.blog.posts.updateOne({...    title" : "A blog post"...  }, {...    $push  : { ...      comments" : {...        name : "joe",...        email : "[email protected]",...        content : "nice post."...      }...    }..   })

И у нас получится такой документ:

{  "_id" : ObjectId("4b2d75476cc613d5ee930164"),  "title" : "A blog post",  "content" : "...",  "comments" : }

Теперь чтобы добавить второй комментарий, мы можем просто запушить еще один раз.

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

> db.users.updateOne(... { _id : 0 },... {...   $push : { ...     comments : { ...       $each : ...     }...   }... })

Создаст два новых комментария в массиве. Такой же эффект как и просто даст с одним элементом.

Есть еще один дополнительный модификатор, который позволяет хранить строго определенное кол-во элементов в массиве, то есть грубо говоря, создает очередь из данных и это модификатор . Если массив превысит число переданное то, mongoDB начнет удалять элементы. К примеру:

> db.users.updateOne(... { _id: 0 },... {...   $push: {...     numbers: {...       $each: ,...       $slice: 3...     }...   }... })

В данном случае удалиться элемент со значением 4. Потому что мы указали положительное число. Если мы укажем отрицательное то элементы начнут удаляться с начала и в таком случае удалиться элемент со значением 1. Можно так же использовать модификатор , который отсортирует элементы по внутреннему полю если оно есть. К примеру:

> db.movies.updateOne({"genre" : "horror"},... { ...   $push : {...     top10 : {...       $each : ,...       $slice : -10,...       $sort : { rating : -1}...     }...   }... })

Опишем, что мы тут делаем, добавляем в массив top10 несколько фильмов и храним не больше 10, после того, как mongoDB сформировала новый массив, мы его отсортируем новый массив по полу rating.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: