Ruby串連MongoDB
想要在Ruby中串連MongoDB,需要使用mongo模組,該模組可以通過ruby內建的gems程式進行安裝。
$ gem update --system$ gem install mongo$ gem install bson_ext
Mongo模組提供了Mongo::Connnection類串連MongoDB,如果不指定具體的資料庫,預設情況下會建立一個持有MongoDB串連的執行個體,
require 'mongo'conn = Mongo::Connection.newputs conn.class # Mongo::Connectionputs conn.database_names # ["admin", "local", ...]
如果需要指定預設的資料庫,可以在建立執行個體的時候指定。如果指定的資料庫不存在,MongoDB會建立該資料庫。
db = Mongo::Connection.new.db('blog')db.create_collection('users') # 建立一個collectionputs db.class # Mongo::DB
涉及資料庫的操作,基本的建立、刪除、拷貝、重新命名。重新命名操作可以通過拷貝和刪除群組合完成。
conn.copy_database('blog', 'blog-backup')conn.drop_database('blog-backup')
在MongoDB中沒有了表的概念,取而代之的是collection,可以理解為容器,記錄全都存放在collection中。對collection所能做的也是傳統的CRUD操作,不過使用起來更加物件導向。Mongo模組的Collection類提供了insert, drop, update, find等方法操作collection。下面大概地瞭解一下它們的用法。
在先前建立的名為users的collection中插入幾條記錄。MongoDB中記錄的類型為類JSON格式,形式如下。
{ "_id" : ObjectId("4d51eb216b6f45122c000001"), "username" : "clovery", "password" : "clovery" }# ruby中無法識別json格式,所以插入記錄時使用ruby的hash格式,mongo模組會自動轉換成json形式# 向users中插入三條記錄db['users'].insert({"username" => "andy", "password" => "12345"})db['users'].insert({"username" => "alien", "password" => "12345"})db['users'].insert({"username" => "angel", "password" => "12345"})db['users'].count # 3
可以通過find_one和find檢索記錄。find_one返回一個BSON::OrderedHash資料,類似於ruby的hash類型。find返回Mongo::Cursor引用,可以 對其進行迭代檢索所有合格資料。
db['users'].find_one # {"_id"=>BSON::ObjectId('4d5246c26b6f451714000004'), "username"=>"andy", "password"=>"12345"}db['users'].find.each do |row| print "#{row['username']} "end# andy alien angel
update可以更新原有的記錄。
db['users'].update({'username' => 'andy'}, {'$set' => {'password' => 'andy'}})# {"_id"=>BSON::ObjectId('4d52499d6b6f451714000008'), "password"=>"andy", "username"=>"andy"}
使用remove刪除collection中的記錄,如果不指定條件,會刪除collection中的所有記錄。
db['users'].remove({'username' => 'andy'}) db['users'].count # 2
刪除collection
db.drop_collection('users')
關於Ruby如何串連MongDB,詳細資料請參考MongoDB Ruby Driver Tutorial。