Для ознакомления с общей концепцией:
Полная официальная документация:
Установка MongoDB
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
Добавим в список источников репозиторий со свежей Mongo
echo 'deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
Обновим список пакетов и установим стабильную версию MongoDB, так как самые последние сборки (mongodb-org) имеют ряд критических ошибок (например нельзя создать пользователя, сломана авторизация и прочее подобное), не позволяющих использовать их на боевых серверах.
sudo apt-get update
sudo apt-get install mongodb-10get
(Не обязательно) Запретим системе выполнять обновление пакета с базой:
echo "mongodb-10get hold" | sudo dpkg --set-selections
Установка необходимых модулей PHP
sudo apt-get install php5-dev php5-mongo
sudo apt-get install php-pear php5-dev
sudo pecl install mongo
Настройка модулей PHP для работы с MongoDB
В конфигурационных файлах php.ini:
sudo mcedit /etc/php5/apache2/php.ini
sudo mcedit /etc/php5/cli/php.ini
sudo mcedit /etc/php5/fpm/php.ini
Нужно добавить строку:
extension=mongo.so
sudo mcedit /etc/php5/apache2/php.ini
sudo mcedit /etc/php5/cli/php.ini
sudo mcedit /etc/php5/fpm/php.ini
extension=mongo.so
Управление пользователями сервера
$ mongo
> use testdb
Что интересно, если указанной базы данных нет - она будет создана автоматически если мы попытаемся что-то в ней делать, например создадим пользователя или коллекцию.
Пользователь с правами "read/write"
> db.addUser("test", "test_pwd123")
Пользователь с правами "readonly"
> db.addUser("new", "webinar111", true)
Изменение пароля пользователя
> db.addUser("new", "new^QWE", true)
Удаление пользователя
Все наши пользователи расположены тут system.users. Для их удаления нужно выполнить:
> db.system.users.remove({"user" : "new"});
> db.system.users.remove({"user" : "new"});
Авторизация в MongoDB по умолчанию для всех
Откроем в режиме редактирования конфигурационный файл:
sudo mcedit /etc/mongodb.conf
Найдём и исправим в нём одну строку
auth = true
После чего сохраним изменения в конфиге и перезапустим базу данных:
sudo /etc/init.d/mongodb restart
Оптимизация работы MongoDB (создание индексов)
Отобразим список индексов:
> db.countrys.getIndexes()
Проиндексируем:
> db.countrys.ensureIndex({"date_add":1})
Подключение к MongoDB из PHP
class Database_Mongo {
public function __construct($Hostname, $Port, $Database, $Username, $Password) {
// Stupid spike-hack
global $mongo_db;
global $mongo_database;
// Store database name
$mongo_database = $Database;
// Connect to database
$mongo_db = new Mongo("mongodb://$Username:$Password@$Hostname:$Port/$Database");
}
public function select_collection($collection) {
// Stupid spike-hack
global $mongo_db;
global $mongo_database;
// Select collection
return $mongo_db->selectCollection($mongo_database,$collection);
}
}
Как видно, тут нет ничего лишнего, только подключение и выбор таблицы (коллекции).
Как подключить в коде
// Тут подключаем класс
define('__ROOT__', dirname(dirname(__FILE__)));
require_once(__ROOT__.'/Database_Mongo.class.php');
// Тут создаём подключение к базе
$mongo = new Database_Mongo($Hostname, $Port, $Database, $Username, $Password);
// Тут выбираем нужную коллекцию
$db = $mongo->select_collection('countrys');