Coding By PHP

自己本身是寫 PHP 的,當然要使用 MongoDB 也是使用 PHP 嘍。

PHP Lib 下載: http://www.mongodb.org/display/DOCS/PHP+Libraries,+Frameworks,+and+Tools 

之前從 Smarty 改用 Codeigniter 之後, Coding 就一直是用 Codeigniter (CI)。

 

Alexbilbie 大大寫的 Codeigniter with MongoDB 

下載網址: https://bitbucket.org/alexbilbie/codeigniter-mongo-library/src/f5b570e5719d/libraries/Mongo_db.php

 

我想由 Mysql 轉 MongoDB 的使用者會遇到的一個問題!!!!!!!!

 

也就是 MongoDB 並沒有 auto_increment 的 field type,在網路上也滿多人討論的。

當然網路上有人提到說用 findAndModify 可以解決,但變成說要新增一個 Collection 就要去新增一筆 seq 變的十分不便利。

文章來源: http://shiflett.org/blog/2010/jul/auto-increment-with-mongodb

小弟就改了一下 Alexbilbie 版的 MongoDB。

大家可以參考一下,這麼一來就不用特別去管 Auto increment 的問題了。

 

作者: Alexbilbie
版本: Version 0.3.7

於 583 行
修改 function insert() 並新增一個 function _increment()

 


public function insert(collection = "", insert = array())
{
        if (empty(collection))
        {
                show_error("No Mongo collection selected to insert into", 500);
        }

        if (count(insert) == 0 !is_array(insert))
        {
                show_error("Nothing to insert into Mongo collection or insert is not an array", 500);
        }

        // Auto Increment
        seq = this->_auth_increment(collection);
        insert["_id"] = seq;


        try
        {
                this->db->{collection}->insert(insert, array(this->query_safety => TRUE));
                if (isset(insert['_id']))
                {
                        return (insert['_id']);
                }
                else
                {
                        return (FALSE);
                }
        }
        catch (MongoCursorException e)
        {
                show_error("Insert of data into MongoDB failed: {e->getMessage()}", 500);
        }
}

private function _auth_increment(collection)
{
        try
        {
                this->where(array("_id" => collection));
                seq = this->get("seq");

                if(!empty(seq[0]["_id"]))
                {
                        findandmodify = array(
                                'findandmodify' => 'seq',
                                'query' => array('_id' => collection),
                                'update' => array('inc' => array("seq" => 1)),
                                'new' => true
                                );
                        this->command(findandmodify);
                        return (seq[0]['seq']+1);
                }
                else
                {
                        findandmodify = array(
                                '_id' => collection,
                                );
                        this->db->seq->insert(findandmodify, array(this->query_safety => FALSE));


                        findandmodify = array(
                                'findandmodify' => 'seq',
                                'query' => array('_id' => collection),
                                'update' => array('inc' => array("seq" => 1)),
                                'new' => true
                                );
                        this->command(findandmodify);
                        return 1;
                }
        }
        catch (MongoCursorException e)
        {
                show_error("Update of data into MongoDB failed: {e->getMessage()}", 500);
        }
}

 

新增一筆記錄

data = array("title" => "Ignited Code");
this->mongo_db->insert('class', data);