Введение в MongoDB
Не реляционные базы данных все больше набирают популярность, и все чаще их можно встретить в проектах с высокой нагрузкой, как решения для увеличение производительности. В этой статье я попытаюсь раскрыть основы работы с MongoDB через расширение pear в php. О том как установить эту базу данных и настроить к ней доступ, вы можете прочитать здесь.
Установление соединения
После установки расширения pear, в своем проекте мы можете использовать ряд новых классов, таких как Mongo, MongoDB, MongoCollection, MongoCursor и прочие<!--more-->. Вот так выглядит установление соединения с сервером БД
$Connection = new Mongo("mongodb://localhost:27017", array("connect" => TRUE));
Первым параметром передается адрес сервера и должен быть записан в формате mongodb://[username:password@]host1[:port1][,host2[:port2:],...]/db
. Однако этот параметр необязателен, и может быть опущен. Тогда соединение будет проводится на стандартный хост/порт указанные в php.ini (обычно это localhost:27017). Также допускается неполная запись, без указания протокола, порта и БД.
Вторым параметром идут настройки (передается массив). Если передать connect => false, то соединение будет установлено позже (во время первого запроса). Этот параметр также необязателен.
Выбор базы данных
В рамках одного соединения позволяется работать с несколькими базами данных, переключений между ними как таковых нету, для этого просто используются разные объекты MongoDB
$Mongo = new Mongo('localhost');
/* @var $DatabaseTest MongoDB */
$DatabaseTest = $Mongo -> test; // test - это имя БД
/* @var $DatabaseLocal MongoDB */
$DatabaseLocal= $Mongo -> local;
Выбор коллекции
В терминологии MongoDB, коллекция - это контейнер для объектов (кортежей), но в отличие от коллекций в реляционной теории и таблиц в SQL, эти объекты не обязаны иметь единый формат (количество полей, имена и их типы). Выбор коллекции происходит по аналогии с базой данных
/* @var $DatabaseTest MongoDB */
$DatabaseTest = $Mongo -> test;
/* @var $ItemsCollection MongoCollection */
$ItemsCollection = $DatabaseTest -> items; // items - это имя коллекции
Добавление документов в коллекцию
Документы должны быть оформлены в виде массива, также допускается использовать и многомерные/многоуровневые массивы
$data = array(
"name" => "Jerald Pupkin",
"age" => 37
);
ItemsCollection -> insert($data);
var_dump($data);
После добавления в БД, всем документам присваивается уникальный идентификатор, который будет записан в ваш документ. Вот так выглядит результат var_dump
/*
array
'name' => string 'Jerald Pupkin' (length=13)
'age' => int 37
'_id' =>
object(MongoId)[4]
*/
print (string) $data['_id']; // 4c9f24d135d8e60533000000
Если же документ уже был получен из базы данных и имеет уникальный идентификатор, но был изменен и нуждается в сохранение, то необходимо воспользоваться методом save
ItemsCollection -> save($data);
Выбор документов
/* @var $Cursor MongoCursor */
$Cursor = ItemsCollection -> find();
$Cursor -> sort( array("name" => 1, "age" => -1) );
$Cursor -> limit(10);
Так как MongoCursor реализует интерфейс Iterator, то доступ к результатам можно получить следующим образом
foreach($Item as $Cursor)
{
var_dump($Item);
}
// или так
$Cursor -> rewind();
while($Cursor -> hasNext())
{
var_dump($Cursor -> current());
Cursor -> next();
}
Использование фильтра (where и columns в SQL)
В качестве первого параметра find принимает массив параметров для фильтра, а в качестве второго массив полей, которые необходимо вернуть
$Cursor = ItemsCollection -> find( array("name" => "Jack Daniels"), array("age") );
// Между 10 и 100
$Cursor = ItemsCollection -> find( array("age" => array('$gt' => 10, '$lt' => 100) ) );
// Один из множества
$Cursor = ItemsCollection -> find( array(
"age" => array('$in' => array(10, 50, 100))
));
// С помощью обратной функции JavaScript
$function = 'function() {
return this.age > 40 || this.name == "John";
}';
$Cursor = ItemsCollection -> find( array(
"age" => array('$where' => $function)
));
Заключение
Надеюсь эта статья оказалась вам полезной. Вот ссылки для более подробной информации