MongoDB коллекции, Этап №2


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

mongodb коллекции


В консоли возможно выполнение арифметических операций MongoDB

> 2+2
4



Возможно определение переменных таким же образом как это реализуется в JavaScript

var color = "red"



Обращение к переменной производится следующим образом

>print('my favorite color is '+color)

my favorite color is red



MongoDB коллекции и работа с ними


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



Просматриваем существующие базы

show dbs

 admin 0.000GB
local 0.000GB
people 0.000GB



Будем работать с одной из них

use people

switched to db people



Смотрим collections

show collections

Вывод команды пустой.



Создадим коллекцию employees

db.createCollection("employees")

{ "ok" : 1 }

 


В mongodb коллекции эквивалентны таблицам в реляционных СУБД, записи эквивалентны строкам


Создадим запись или документ

vitaliy = {

firstname: "Vitaliy",
lastname: "Samaoylov",
dept:"Sales",
started: "1988",
};



Запись сейчас находится в памяти, но в базе данных не сохранено


Сохраняем

db.employees.save(vitaliy)

WriteResult({ "nInserted" : 1 })



Ищем работников

db.employees.find()

{ "_id" : ObjectId("59e0b543f9e48aadb7c1c698"), "firstname" : "Vitaliy", "lastname" : "Samaoylov", "dept" : "Sales", "started" : "1988" }



Результатом поиска должен быть идентификатор только что добавленного объекта и информация о нем



Если производится сохранение — при этом запись уже присутствует в БД данные будут обновлены. При использовании insert этого не произойдет если на необходимость обновления не указать непосредственно


> db.employees.insert({firstName:"Michel"},{lastName:"Volkov"},{dept:"Web Design"},{started: 2006})

WriteResult({ "nInserted" : 1 })



db.employees.find().pretty()

pretty обеспечивает вывод в более читабельном формате — сейчас в результатах поиска по БД будут уже два сотрудника

 


Можно работать с множеством записей, в примере добавляются 2 записи

db.employees.insert([{firstname:"Fedor",lastName:"Ivanov",dept:"Programming",started:1999}, {firstname:"Nikolay",lastName:"Petrov",dept:"Sales",started :2014}])

db.employees.find().pretty()



В выводе теперь присутствует информация о двоих новых сотрудниках.

use test

switched to db test


db.createCollection('squares')
for(var i = 0;i < 50;i++){ db.squares.save({n: i,square: i*i}) }

WriteResult({ "nInserted" : 1 })



db.squares.find().pretty()

{ "_id" : ObjectId("59e0b7d9f9e48aadb7c1c69c"), "n" : 0, "square" : 0 }
{ "_id" : ObjectId("59e0b7d9f9e48aadb7c1c69d"), "n" : 1, "square" : 1 }
{ "_id" : ObjectId("59e0b7d9f9e48aadb7c1c69e"), "n" : 2, "square" : 4 }
{ "_id" : ObjectId("59e0b7d9f9e48aadb7c1c69f"), "n" : 3, "square" : 9 }
{ "_id" : ObjectId("59e0b7d9f9e48aadb7c1c6a0"), "n" : 4, "square" : 16 }
{ "_id" : ObjectId("59e0b7d9f9e48aadb7c1c6a1"), "n" : 5, "square" : 25 }

Видим результат в котором каждое число перебираемое в цикле возводится в квадрат, результат записывается в базу squares



Снова переходим к базе с которой работали изначально

use people

db.employees.find().pretty()



Добавим array с признаками, который других элементам базы свойственен не будет

will = {firstname:"Roman", lastname:"Isidorov", dept:"Programming", started:2002, skills:["web design", "graphic design", "web programming"]}


Сохраняем введенные значения

db.employees.save(will)

WriteResult({ "nInserted" : 1 })



Просматриваем список сотрудников

db.employees.find().pretty()



Другие операции с базами данных MongoDB


Производим поиск по департаменту, в котором работает сотрудник

db.employees.find({dept:"Sales",started:2002}).pretty()

{
"_id" : ObjectId("59e0b6fcf9e48aadb7c1c69b"),
"firstname" : "Nikolay",
"lastName" : "Petrov",
"dept" : "Sales",
"started" : 2014
}

Получим выборку с идентификатором и первыми двумя полями



Можно с легкостью выбрать только имена и фамилии сотрудников с их идентификаторами в базе

db.employees.find({},{firstName:1,lastName:1})

{ "_id" : ObjectId("59e0b543f9e48aadb7c1c698") }
{ "_id" : ObjectId("59e0b5d1f9e48aadb7c1c699"), "firstName" : "Michel" }
{ "_id" : ObjectId("59e0b6fcf9e48aadb7c1c69a"), "lastName" : "Ivanov" }
{ "_id" : ObjectId("59e0b6fcf9e48aadb7c1c69b"), "lastName" : "Petrov" }
{ "_id" : ObjectId("59e0b8d4f9e48aadb7c1c6ce") }



В MongoDB можно использовать операторы сравнения gt — больше чем

db.employees.find({started:{$gt:2005}}).pretty()



Команда выведет данные о сотрудниках, которые пришли в компанию после 2005 года

Также применяются булевы операторы сравнения (И, ИЛИ) — можно узнать кто пришел до 2000 года и после 2010

db.employees.find({$or:[{started:{$lt:2000}},{started:{$gte:2010}}]}).pretty()



Здесь gte — больше или равно

Так можно выяснить, что в отделе продаж нет никого кто начал бы трудовую деятельность ранее 2000 года

db.employees.find({$and:[{started:{$lt:2000}},{dept:»Sales»}]}).pretty()



Сейчас найдем массив или значение в поддокументах

db.employees.find({skills: ["Internet Marketing","SEO","Advertising" ]}).pretty()



В выводе будет только сотрудник обладающий всеми тремя заданными навыками



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

db.employees.find({skills:"Web Design"}).pretty()

Поиск в поддокументах по всем указанным параметрам:

db.employees.find({address:{street:"656 Israel ave",city:"Porthmuth",state:"NH"}})



По одному значению:

db.employees.find({"address.state":"MA"}).prety



При поиске по поддокументам поддокументов потребуется использовать конструкцию вида address.statr.something



Когда коллекция больше не нужна ее можно удалить

db.getCollection("employees").drop()

true

Как и для реляционных БД, для Mongo существует понятие дампа — информацию из базы можно сохранить в файл. В дальнейшем восстановив из него на том же или другом сервере.

Сказать спасибо