Mongoid2.0で_idでfind
require 'rubygems' gem 'mongoid','2.0.0.beta.16' require 'mongoid' user = User.first(:conditions => {:_id => BSON::ObjectID("4c71228232e569270a000002")}) puts user.to_json
1.9までは_idがstringだったけど2.0のbetaではBSON Objectで入っているので、findの時にBSON::ObjectIDで検索する(mongoを素で使っている時と同じ)
正規表現でfind
自分で単語を切ってindexを作れというdocumentもあるが http://www.mongodb.org/display/DOCS/Full+Text+Search+in+Mongo
(これ同じように日本語のindexで作って、Ruby driverとjsのコンソール両方で試したけど日本語でちゃんと探せたのでmecabとか使って同じ事やるのもいいかも)
日本語で数万件程度なら、正規表現でfindでも十分そうという事がわかった。
先にこんな風に540文字のテキストデータの入ったdocumentを何万件かinsertしておく
require 'rubygems' require 'mongo' m = Mongo::Connection.new('localhost', 27017) db = m.db('bigdata') for i in 0...10000 do db['test'].insert({:text => '今日はBIG丼でさんざんな目にあった' * 30}) puts "#{i}" if i%100 == 0 end
探す
p db['test'].find({:name => /B.*丼/}).first
3万件入れておいて、1万件返ってくる正規表現のfindのqueryを投げた。
0.5秒ぐらいで返ってきた。
返ってきてるのはcursorなので、10000件分のデータが飛んできているわけではなくてeachとかで回すと都度mongo driverが自動的に取得しにいっていると思うけど。