Pergunta

Alguém pode ajudar a me apontar para um tutorial, biblioteca etc. que me permitirá trabalhar com o MongoDB da CodeIgniter?

Foi útil?

Solução

Não tenho certeza se é o "Codeigniter Way", mas criei uma biblioteca CodeIgniter que estende a classe Mongo com uma propriedade extra para armazenar a conexão atual do banco de dados.

Aqui estão os arquivos de código relevantes do meu projeto.

Config/Mongo.php

$config['mongo_server'] = null;
$config['mongo_dbname'] = 'mydb';

Bibliotecas/Mongo.php

class CI_Mongo extends Mongo
{
    var $db;

    function CI_Mongo()
    {   
        // Fetch CodeIgniter instance
        $ci = get_instance();
        // Load Mongo configuration file
        $ci->load->config('mongo');

        // Fetch Mongo server and database configuration
        $server = $ci->config->item('mongo_server');
        $dbname = $ci->config->item('mongo_dbname');

        // Initialise Mongo
        if ($server)
        {
            parent::__construct($server);
        }
        else
        {
            parent::__construct();
        }
        $this->db = $this->$dbname;
    }
}

E um controlador de amostra

Controladores/posts.php

class Posts extends Controller
{
    function Posts()
    {
        parent::Controller();
    }

    function index()
    {
        $posts = $this->mongo->db->posts->find();

        foreach ($posts as $id => $post)
        {
            var_dump($id);
            var_dump($post);
        }
    }

    function create()
    {
        $post = array('title' => 'Test post');
        $this->mongo->db->posts->insert($post);
        var_dump($post);
    }
}

Outras dicas

Eu gosto do exemplo de Stephen Curran, pois é simples e permite que uma interface seja Mongo sem muita funcionalidade escrita no PHP, eu tendem a encontrar enormes clases de abstração um pouco às vezes para o que estou procurando.

Eu estendi o exemplo dele para incluir a autenticação do banco de dados. Vá aqui: http://www.mongodb.org/display/docs/security+and+authentication Para ler sobre autenticação Mongo, não se esqueça de ativar a autenticação para o servidor Mongo ao qual você está se conectando.

Também mudei a função de construtor de estilo antigo para ser __construct e estou lidando com exceções de conexão Mongo, pois elas podem revelar seu nome de usuário e senha.

Config/Mongo.php

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

$config['mongo_server'] = 'localhost';
$config['mongo_dbname'] = 'my_mongo_db';
$config['mongo_username'] = 'mongo_user';
$config['mongo_password'] = 'password1234';

/* End of file mongo.php */

Bibliotecas/Mongo.php

<?php

class CI_Mongo extends Mongo{

    protected $db;

    function __construct()
    {   
        // Fetch CodeIgniter instance
        $ci = get_instance();
        // Load Mongo configuration file
        $ci->load->config('mongo');

        // Fetch Mongo server and database configuration
        $server = $ci->config->item('mongo_server');
        $username = $ci->config->item('mongo_username');
        $password = $ci->config->item('mongo_password');
        $dbname = $ci->config->item('mongo_dbname');

        // Initialise Mongo - Authentication required
        try{
            parent::__construct("mongodb://$username:$password@$server/$dbname");
            $this->db = $this->$dbname;
        }catch(MongoConnectionException $e){
            //Don't show Mongo Exceptions as they can contain authentication info
            $_error =& load_class('Exceptions', 'core');
            exit($_error->show_error('MongoDB Connection Error', 'A MongoDB error occured while trying to connect to the database!', 'error_db'));           
        }catch(Exception $e){
            $_error =& load_class('Exceptions', 'core');
            exit($_error->show_error('MongoDB Error',$e->getMessage(), 'error_db'));           
        }
    }
}

Trabalhar com o MongoDB no Codeigniter não seria muito diferente do que trabalhar com ele em nenhum outro lugar.

Você pode bater juntos uma biblioteca MongoDB que se conectaria no construtor e armazenaria $ this-> Conn para ser usado nos métodos posteriormente.

Em seguida, trabalhe diretamente com a propriedade Conn em seus controladores ou crie alguns métodos na biblioteca do MongoDB para fazer isso por você.

Dê uma olhada aqui Para ver o tutorial de PHP simples para trabalhar com MongoDB.

Felizmente, eu criaria uma biblioteca para você, mas isso viria com um preço. :-p

Estou usando o MongoDB com CI e criei o seguinte. Funciona para mim, mas tenho certeza de que pode ser aprimorado um pouco. Vou me preocupar em ajustar mais tarde, mas agora faz o que eu quero.

Criei um modelo chamado "Database_Conn.php"

class Database_Conn extends Model {

    function _connect() {
        $m = new Mongo();

        $db = $m->selectDB( "YOUR DATABASE NAME" );
        return $db;
    }
}

Então, se eu precisar me conectar a uma coleção dos meus modelos.

$collection = Database_Conn::_connect()->selectCollection( "COLLECTION NAME" );
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top