Ruby mongoDBに接続して指定した件数だけドキュメントを取得する

Ruby mongoDBに接続して指定した件数だけドキュメントを取得する

Rubyで、mongoDBに接続して指定した件数だけドキュメントを取得するソースコードを記述してます。ライブラリ「mongo」を使用して取得します。

環境

  • OS windows11 home
  • ruby ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x64-mingw32]
  • mongoDB 5.2.0
  • vscode 1.63.2

mongoインストール

ライブラリ「mongo」を使います。なければ「gem」を使ってインストールしておきます。

gem install mongo

サンプルコード

localhostにある「mongoDB」に接続して、以下のDB「hoge」にあるコレクション「foo」のドキュメントを使用して、サンプルコードを実行してみます。


ここでは「test.rb」という名前で作成してます。5件だけ取得するコードを作成してみます。

require "mongo"

Mongo::Logger.logger.level = ::Logger::FATAL

begin
  c = Mongo::Client.new(["127.0.0.1:27017"])

  d = c.use("hoge")

  d[:foo].find().limit(5).each { |doc| puts doc }
  
rescue Mongo::Error::NoServerAvailable => e
  
  p e

end

実行結果を確認すると、5件だけドキュメントが取得されていることが確認できます。

> ruby test.rb

{"_id"=>BSON::ObjectId('61c58bf09d1a5be60905803e'), "name"=>"itiro", "age"=>10.0, "gender"=>"m"}
{"_id"=>BSON::ObjectId('61c58bf09d1a5be60905803f'), "name"=>"jiro", "age"=>20.0, "gender"=>"m"}
{"_id"=>BSON::ObjectId('61c58bf09d1a5be609058040'), "name"=>"saburo", "age"=>30.0, "gender"=>"m"}
{"_id"=>BSON::ObjectId('61c58bf09d1a5be609058041'), "name"=>"siro", "age"=>40.0, "gender"=>"f"}
{"_id"=>BSON::ObjectId('61c58bf09d1a5be609058042'), "name"=>"goro", "age"=>50.0, "gender"=>"x"}

開始位置を指定

skipを使用すると開始位置を指定することが可能です。

require "mongo"

Mongo::Logger.logger.level = ::Logger::FATAL

begin
  c = Mongo::Client.new(["127.0.0.1:27017"])

  d = c.use("hoge")

  d[:foo].find().skip(2).limit(5).each { |doc| puts doc }
  
rescue Mongo::Error::NoServerAvailable => e
  
  p e

end

実行結果

> ruby test.rb

{"_id"=>BSON::ObjectId('61c58bf09d1a5be609058040'), "name"=>"saburo", "age"=>30.0, "gender"=>"m"}
{"_id"=>BSON::ObjectId('61c58bf09d1a5be609058041'), "name"=>"siro", "age"=>40.0, "gender"=>"f"}
{"_id"=>BSON::ObjectId('61c58bf09d1a5be609058042'), "name"=>"goro", "age"=>50.0, "gender"=>"x"}
{"_id"=>BSON::ObjectId('61c58bf09d1a5be609058043'), "name"=>"gonbe", "age"=>60.0, "gender"=>"x"}
{"_id"=>BSON::ObjectId('61c58bf09d1a5be609058044'), "name"=>"gonbe", "age"=>70.0, "gender"=>"x"}