LoginSignup
1
1

More than 5 years have passed since last update.

rubyでmongodb3(ユーザ認証付き)への接続・DB操作検証メモ

Last updated at Posted at 2018-04-19

はじめに

centos7上で動作するmongodb3(ユーザ認証設定あり)をruby(2.5.0p0)から操作する検証を行った際の自分メモです。
mongodb3の構成は@SOJO様の記載したこちらの手順をご確認ください。

ruby gem [mongo]のインストール

sudo gem install mongo

検証プログラム

詳細はコメントをご確認ください。尚、Rubocopさんがブチ切れる構文です:wink:

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 }

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1