Данный материал является логическим продолжением первой статьи цикла по работе с нереляционной СУБД 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 существует понятие дампа — информацию из базы можно сохранить в файл. В дальнейшем восстановив из него на том же или другом сервере.