Domanda

Qualcuno può aiutare a me che punta a un tutorial, biblioteca, ecc, che mi permetterà di lavorare con MongoDB da CodeIgniter?

È stato utile?

Soluzione

Non sono sicuro se la "via CodeIgniter", ma ho creato una biblioteca CodeIgniter che estende la classe Mongo con una proprietà in più per memorizzare la connessione al database corrente.

Ecco i file di codice rilevanti dal mio progetto.

config / mongo.php

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

librerie / 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 un controller di esempio

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

Altri suggerimenti

Mi piace l'esempio di Stephen Curran in quanto è semplice e permette un'interfaccia per Mongo senza troppe funzionalità per iscritto entro Php, tendo a trovare enorme astrazione clases un po 'troppo a volte, per quello che sono dopo.

Ho esteso il suo esempio per includere l'autenticazione del database. Vai qui: http://www.mongodb.org/display/DOCS/Security + e + autenticazione leggere sull'autenticazione mongo, non dimenticate di attivare l'autenticazione per il Mongo server cui ci si connette.

Inoltre ho cambiato la vecchia funzione di costruzione stile da __construct e sono la gestione delle eccezioni di collegamento Mongo in quanto possono rivelare il nome utente e la password.

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 */

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

Lavorare con MongoDB in CodeIgniter non sarebbe molto diverso che lavorare con esso in qualsiasi altro luogo.

Si potrebbe mettere insieme una biblioteca MongoDB che collegherebbe nel costruttore e memorizzare $ this-> conn da utilizzare nei metodi più tardi.

quindi o lavorare direttamente con la proprietà conn nel vostro controller o di creare un paio di metodi nella libreria MongoDB per fare questo per voi.

Date un'occhiata qui per vedere il tutorial PHP pianura per lavorare con MongoDB.

Sarei felice si crea una libreria per questo, ma sarebbe venuto con un prezzo. :-p

Sto usando MongoDB w / CI e si avvicinò con la seguente. Funziona per me, ma sono sicuro che può essere ottimizzato un po '. Mi preoccupo tweaking più tardi, ma in questo momento fa quello che voglio.

Ho creato un modello chiamato "database_conn.php"

class Database_Conn extends Model {

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

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

Quindi, se ho bisogno di connettersi a una raccolta dei miei modelli.

$collection = Database_Conn::_connect()->selectCollection( "COLLECTION NAME" );
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top