はじめに
centos7上で動作するmongodb3(ユーザ認証設定あり)をruby(2.5.0p0)から操作する検証を行った際の自分メモです。
mongodb3の構成は@SOJO様の記載したこちらの手順をご確認ください。
ruby gem [mongo]のインストール
sudo gem install mongo
検証プログラム
詳細はコメントをご確認ください。尚、Rubocopさんがブチ切れる構文です
require 'mongo'
#
class UseMongo
# 標準出力を汚さないためのおまじない。商用利用時は出力をlogfileにする設定変更要。
Mongo::Logger.logger.level = Logger::FATAL
# 接続情報の定数化
CLIENT = Mongo::Client.new(
%w[127.0.0.1:27017], # array(ip:port) default_setting
database: 'test',
user: 'myuser',
password: ENV['TEST_DATABASE_PASSWORD']
)
# 操作対象となるコレクション(rdbmsのテーブル)を定数化
COLLECTION = CLIENT[:test_collection]
# insert処理検証
def insert(item)
return false if item.nil? || item.length.zero?
# example
COLLECTION.insert_one(item)
true
rescue StandardError => e
e
end
# collectionを全て取得するメソッドなのでactive_recordっぽくallメソッドとする。
def all
COLLECTION.find
rescue StandardError => e
e
end
#Whereメソッドkey,val指定でデータ取得
def where(key, val)
return false if key.nil? || key.length.zero?
return false if val.nil? || val.length.zero?
COLLECTION.find({"#{key}": "#{val}"})
rescue StandardError => e
e
end
# whereのIN句 [col] IN (array)として検索。
def where_in(col ,arr)
return false if col.nil? || col.length.zero?
return false if arr.nil? || arr.length.zero?
COLLECTION.find({"#{col}":{ '$in': arr }})
rescue StandardError => e
e
end
end
# exapmle 以下、動作確認したいメソッドをコメントアウトして実行。
mongo = UseMongo.new
# v = { hoge: 'fuga', cat: 'tama' }
# doc = {vern: ['食べログ3.5','高評価','美味い','高い']}
# mongo.insert(v) # insert
# mongo.insert(doc) # insert
# mongo.all.each {|m| puts m }
# mongo.where('hoge', 'fuga').each {|w| puts w }
# arr = %w[キツい 高い]
# mongo.where_in('vern',arr).each {|w| puts w }