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 }
無事に動作しているようです.おつかれさまでした.
参考
- 40 https://www.google.co.jp/
- 20 http://ecl.info.kindai.ac.jp/rssreader.html
- 15 https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&...
- 7 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 6 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 5 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 4 Bing(ruby mongodb)
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 3 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&f...
- 2 http://www.google.com/url?sa=t&rct=j&q=mongodb rub...
- 2 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 2 http://www.google.com/search
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=mongoid 接...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=mongodb t...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=mongodb r...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=mongo 2.0...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=linux mon...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 2 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&s...
- 1 https://www.google.com/
- 1 http://www.google.com/url?sa=t&rct=j&q=ubuntu データベ...
- 1 http://www.google.com/url?sa=t&rct=j&q=ruby mongod...
- 1 http://www.google.com/url?sa=t&rct=j&q=mongodb ubu...
- 1 http://www.google.com/url?sa=t&rct=j&q=mongodb ubu...
- 1 http://www.google.com/url?sa=t&rct=j&q=mongodb ubu...
- 1 http://www.google.com/url?sa=t&rct=j&q=mongodb レコー...
- 1 http://www.google.com/url?sa=t&rct=j&q=mongoコンソール&...
- 1 http://www.google.com/url?sa=t&rct=j&q=mongo 2.0.2...
- 1 http://www.google.com/url?sa=t&rct=j&q=Ubuntu 11.1...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=t&rct=j&q=&esrc=s&sou...
- 1 http://www.google.com/url?sa=X&q=http://ecl.info.k...
- 1 http://www.google.co.jp/url?url=http://ecl.info.ki...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu 11...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu 10...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntuでデー...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu sh...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu ru...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu mo...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu 10...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu 10...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu 10...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ubuntu 10...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby3 mon...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby 動作確認...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby ubun...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...
- 1 http://www.google.co.jp/url?sa=t&rct=j&q=ruby mong...