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