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」という名前で作成してます。条件を指定して、1件だけ更新するコードを作成してみます。

require "mongo"

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

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

  d = c.use("hoge")

  result = d[:foo].update_one({:name => "itiro"}, '$set' => {:age => 11})

  p result
  
rescue Mongo::Error::NoServerAvailable => e
  
  p e

end

実行結果を確認すると、指定した条件でデータが1件だけ更新されていることが確認できます。

> ruby test.rb
#<Mongo::Operation::Update::Result:0x740 documents=[{"n"=>1, "nModified"=>1, "ok"=>1.0}]>

複数更新

複数の値を更新するには「update_many」を使用します。

require "mongo"

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

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

  d = c.use("hoge")

  result = d[:foo].update_many({:gender => "m"}, '$set' => {:age => 100})

  p result
  
rescue Mongo::Error::NoServerAvailable => e
  
  p e

end

実行結果

> ruby test.rb
#<Mongo::Operation::Update::Result:0x740 documents=[{"n"=>3, "nModified"=>2, "ok"=>1.0}]>

複数件、更新されていることが確認できます。