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