1. 程式人生 > >ruby操作mongodb

ruby操作mongodb

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.new
puts conn.class            # Mongo::Connection
puts conn.database_names   # ["admin", "local", ...]

如果需要指定預設的資料庫,可以在建立例項的時候指定。如果指定的資料庫不存在,MongoDB會建立該資料庫。

db = Mongo::Connection.new.db('blog')
db.create_collection('users')  # 建立一個collection
puts 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')