トップ «前の日記(2012-01-26) 最新 次の日記(2012-02-02)»

たいぷらいたーざっき。

2010|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|09|

2012-01-31 Ruby×Mongoid×MongoDB: 導入から動作確認まで (Ubuntu)

_ [Ruby][Linux] Ruby×Mongoid×MongoDB: 導入から動作確認まで (Ubuntu)

「なんかMongoDB使ってみたいんだけど,どこから手をつければいいのやら」という人向けの記事です.RubyからMongoDBを簡単に(ActiveRecordっぽく)扱えるMongoidを使います.Ubuntu 10.04以降が対象です.

MongoDBの導入

Ubuntuで用意されている mongodb パッケージは古いので,開発元の最新版パッケージを使います.下記リンク先に設定方法が書かれています.

まず,公開鍵(GPG key)を登録します.

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

つぎにapt-lineを編集します.Synapticパッケージマネージャを使ってリポジトリに下記を追加するか,/etc/apt/sources.listに直接書き足します.ただし,パッケージマネージャを使う場合は"ソース"のリポジトリも勝手に追加されてしまうので,外しておきます.

deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen

いよいよMongoDBをインストールします.下記のようにいくつか種類がありますが,今回は新しい mongodb-10gen をインストールします.

  • mongodb: Ubuntuで用意されている古いパッケージ (Ubuntu 11.10では 1.8.2)
  • mongodb18-10gen: 開発元が用意している古いバージョン (1.8.4)
  • mongodb-10gen: 開発元が用意している新しいバージョン (2.0.2: 2012-01-16時点)
$ sudo apt-get install mongodb-10gen

コンソールから…

mongo というコマンドでコンソールから操作することができます.

$ mongo

デフォルトでは test というデータベースが操作対象になります.接続先やデータベースを変更したい場合は,次のように指定します.

$ mongo 127.0.0.1:27017/test   # <Hostname>:<Port>/<Database>
MongoDB shell version: 2.0.2
connecting to: 127.0.0.1:27017/test

コンソールからの操作方法はあんまり知りません.

> db  # いま接続しているデータベースを表示
test
> show collections  # DBに存在するコレクション(テーブル)を表示
demo
> db.demo.find()    # SELECT * FROM demo; 的な感じ
{ "_id" : ObjectId("4eed96d88aeb3fc15228666c"), "a" : 1 }

>> db.demo.insert({"b": 3})  # ドキュメント(レコード)を追加.スキーマレスなのでキー(フィールド)は自由に指定できる
> db.demo.find()
{ "_id" : ObjectId("4eed96d88aeb3fc15228666c"), "a" : 1 }
{ "_id" : ObjectId("4f25e5b937e9ec84c1dba9a4"), "b" : 3 }  # 追加されている

>> db.example.insert({ test: 2 })  # 存在しないコレクション(テーブル)は自動作成してくれる
>> db.example.find()
{ "_id" : ObjectId("4f25e5d337e9ec84c1dba9a5"), "test" : 2 }

Mongoidの導入

きっとこれだけです.

$ gem install mongoid

Mongoidを使う

まずは接続するホスト・ポート・データベースを指定します.

require 'mongoid'

Mongoid.configure do |config|
  config.master = Mongo::Connection.new('localhost', 27017).db("book_store")
end

つぎに,操作したいコレクション(テーブル)名に対応するクラスを作成し,Mongoid::Documentをincludeします. MongoidはODM(Object Document Mapper)なので,1つのドキュメント(レコード)とオブジェクトとが関連付けられます.

class Book # コレクション名は books (大文字の区切りはアンダーバーに,末尾は複数形になる)
  include Mongoid::Document
end

さあ,操作してみましょう.ActiveRecordっぽく操作できます.

> require './mongo_test.rb'
 => true
> Book.count  # レコード数
 => 0
> Book.create({ name: "MongoDB: The Definitive Guide", price: 39.99 })  # 作成
 => #<Book _id: 4f278d0a4a62136e61000001, _type: nil, name: "MongoDB: The Definitive Guide", price: 39.99>

> book = Book.first   # レコード取得
 => #<Book _id: 4f278d0a4a62136e61000001, _type: nil, name: "MongoDB: The Definitive Guide", price: 39.99>
> book.name   # フィールドには簡単にアクセスできる
 => "MongoDB: The Definitive Guide"

> Book.count   # レコード数
 => 1

本当に追加されたのかな? ということで,コンソールから確認してみます.

$ mongo 127.0.0.1:27017/book_store
MongoDB shell version: 2.0.2
connecting to: 127.0.0.1:27017/book_store

> show collections   # books コレクション(テーブル) は作られているかな?
books
system.indexes

> db.books.find()    # books コレクションにドキュメント(レコード)は追加されたかな?
{ "_id" : ObjectId("4f278d0a4a62136e61000001"), "name" : "MongoDB: The Definitive Guide", "price" : 39.99 }

無事に動作しているようです.おつかれさまでした.


参考

本日のリンク元

トップ «前の日記(2012-01-26) 最新 次の日記(2012-02-02)»

operated by Kindai ECL

operated by Kindai ECL