Pregunta

¿Alguien puede ayudar en señalarme a un tutorial, biblioteca, etc, que me permitirá trabajar con MongoDB de CodeIgniter?

¿Fue útil?

Solución

No estoy seguro de si es el "camino CodeIgniter" pero creó una biblioteca CodeIgniter que amplía la clase Mongo con una propiedad adicional para almacenar la conexión de base de datos actual.

Aquí están los archivos de código relevantes de mi proyecto.

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;
    }
}

Y un controlador de ejemplo

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);
    }
}

Otros consejos

Me gusta el ejemplo de Stephen Curran, ya que es simple y permite una interfaz para Mongo sin demasiada funcionalidad escrito dentro de PHP, que tienden a encontrar gran abstracción clases un poco demasiado a veces por lo que soy después.

He ampliado su ejemplo para incluir la autenticación de base de datos. Vaya aquí: http://www.mongodb.org/display/DOCS/Security + y + autenticación para leer acerca de la autenticación mongo, no se olvide de activar la autenticación para el Mongo servidor que se está conectando.

También he cambiado la función constructora de estilo antiguo que se __construct y estoy manejo de excepciones de conexión Mongo ya que pueden revelar su nombre de usuario y contraseña.

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'));           
        }
    }
}

Trabajar con MongoDB en CodeIgniter no sería muy diferente a trabajar con él en cualquier otro lugar.

Se podía tocar juntos una biblioteca MongoDB que conectaría en el constructor y almacenar $ this-> conn para ser utilizados en los métodos más adelante.

a continuación, o bien trabajar directamente con la propiedad conn en sus controladores o crear algunos métodos en la biblioteca de MongoDB para hacer esto para usted.

Tome una mirada aquí para ver el tutorial de PHP sencillo para trabajar con MongoDB.

Con mucho gusto le gustaría crear una biblioteca para esto, pero que llegaría con un precio. :-p

Estoy usando MongoDB w / CI y se le ocurrió la siguiente. Funciona para mí, pero estoy seguro de que puede ser ajustado un poco. Me preocuparé de ajustar más tarde, pero en este momento se hace lo que yo quiero.

He creado un modelo llamado "database_conn.php"

class Database_Conn extends Model {

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

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

A continuación, si se necesita para conectarse a una colección de mis modelos.

$collection = Database_Conn::_connect()->selectCollection( "COLLECTION NAME" );
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top