Overview
このガイドでは、 RubyドライバーでMongoDB のデータベースとコレクションを使用する方法を学習できます。
MongoDB では、データは次のレベルの階層に整理されています。
データベース: MongoDB インスタンス内の最上位のデータ組織。
コレクション: MongoDB はドキュメントをコレクションに保存します。 関係データベースのテーブルに類似しています。
ドキュメント: string 、数値、日付などのリテラル データ、およびその他の埋め込みドキュメントが含まれます。
ドキュメント フィールドのタイプと構造の詳細については、 マニュアルの ドキュメントMongoDB Server ガイドを参照してください。
データベースへのアクセス
目的のデータベース名で Mongo::Clientインスタンスを作成し、データベースにアクセスします。
次の例えではtest_databaseという名前のデータベースにアクセスします。
client = Mongo::Client.new(['127.0.0.1:27017'], database: 'test_database') database = client.database
コレクションにアクセスする
データベースのインスタンスで [] メソッドを使用してコレクションにアクセスします。
次の例では、 test_collection という名前のコレクションにアクセスします。
database = client.database collection = database['test_collection']
Tip
指定されたコレクション名がデータベースにまだ存在しない場合、MongoDB は最初にデータを挿入するときに暗黙的にコレクションを作成します。
コレクションを作成する
MongoDB用のRubyドライバーには直接的な create_collection メソッドはありませんが、create メソッドを使用して特定のオプションを持つコレクションを作成できます。
次の例では、具体的なオプションを使用して sample_collection というコレクションを作成します。
database = client.database database[:example_collection].create(capped: true, size: 1024)
create コマンド メソッドの引数として渡すことで、最大サイズ、ドキュメント検証ルールなどのコレクションオプションを指定できます。任意パラメーターの完全なリストについては、create コマンドのMongoDBドキュメントを参照してください。
コレクションの一覧を取得する
collections メソッドを呼び出すと、データベース内のコレクションのリストをクエリできます。このメソッドは、データベース内のコレクションオブジェクトの配列を返します。
次の例では、collections メソッドを呼び出し、配列を反復処理して結果を出力します。
database = client.database collection_list = database.collections collection_list.each do |collection| puts collection.name end
データベース内のコレクションの名前のみをクエリするには、次のようにcollection_namesメソッドを呼び出します。
database = client.database collection_names = database.collection_names collection_names.each do |name| puts name end
注意
database.collections オブジェクト リストにはより詳細な情報が提供されます(つまり、各コレクションオブジェクトはメタデータをさらに照会できます)。一方、database.collection_names はコレクション名を単純に一覧表示します。
コレクションの削除
データベースからコレクションを削除するには、 dropメソッドを使用します。
次の例では、 test_collectionコレクションを削除しています。
database = client.database collection = database[:test_collection] collection.drop
警告
コレクションを削除すると、コレクション内のすべてのデータが削除されます
データベースからコレクションを削除すると、そのコレクション内のすべてのドキュメントとすべてのインデックスが永続的に削除されます。
コレクション内のデータが不要になった場合にのみコレクションを削除します。
データベースの削除
MongoDBデプロイからデータベースを削除するには、データベースインスタンスで drop メソッドを使用します。
次の例では、test_databaseデータベースを削除しています。
client = Mongo::Client.new(['127.0.0.1:27017'], database: 'test_database') database = client.database database.drop
警告
データベースを削除すると、データベース内のすべてのデータが削除されます
データベースを削除すると、そのデータベース内のすべてのコレクション、ドキュメント、およびインデックスが 永続的に 削除されます。
データが不要になった場合にのみデータベースを削除します。
読み取り操作と書込み操作の設定
読み込み設定( read preference ) を設定することで、ドライバーが読み取り操作をルーティングする方法を制御できます。 また、読み取り保証 ( read concern ) と書込み保証 ( write concern ) を設定して、ドライバーがレプリカセットでの読み取りおよび書込み (write) 操作の確認を待機する方法のオプションも制御できます。
デフォルトでは、データベースはMongo::Clientインスタンスからこれらの設定を継承し、コレクションは データベースからこれらを継承します。 ただし、次のいずれかの方法を使用して、データベースまたはコレクションのこれらの設定を変更できます。
database.with:データベースを取得し、新しい読み込み設定 (read preference)、読み取り保証 (read concern)、書込み保証 (write concern)を適用します。collection.with:コレクションを取得し、新しい読み込み設定 (read preference)、読み取り保証 (read concern)、書込み保証 (write concern)を適用します。
上記のメソッドで読み取りまたは書込み設定を変更するには、 メソッドを呼び出して、新しい読み込み設定 (read preference)、読み取り保証 (read concern)、または書込み保証 (write concern)を渡します。
次の例では、database.with メソッドを使用して、test-database というデータベースの読み込み設定 (read preference)、読み取り保証 (read concern) ) 、 書込み設定(write preference) を変更する方法を示しています。
database_with_settings = client.use('test_database').with( read: { mode: :secondary }, read_concern: { level: :local }, write: { w: :majority } )
次の例は、コレクションの読み込み設定 (read preference)、読み取り保証 (read concern)、書込み保証 (write concern)を変更する方法を示しています。
collection_with_settings = client[:test_collection].with( read: { mode: :secondary }, read_concern: { level: :local }, write: { w: :majority } )
読み取りおよび書込み設定の詳細については、MongoDB Server マニュアルの次のガイドを参照してください。
タグセット
MongoDB Serverでは、選択した任意の基準に従ってレプリカセットメンバーにキーと値のタグを適用できます。次に、それらのタグを使用して、1 つ以上のノードを 読み取り操作の対象にすることができます。
デフォルトでは 、 MongoDB Rubyドライバーは読み取り操作に プライマリ を選択します。この動作を変更するには、読み込み設定(read preference)と、任意で タグセット を設定します。
次のコード例では、:read パラメーターに渡されるタグセットは、 Rubyドライバーに対して、ニューヨークデータセンター('dc':'ny')からの読み取りを優先し、サンフランシスコデータセンター('dc':'sf')にフォールバックするように指示します。
client = Mongo::Client.new(['IP_ADDRESS_001:27017'], database: 'test', read: { mode: :secondary, tag_sets: [{'dc' => 'ny'}, {'dc' => 'sf'}] }) database = client.database collection = database[:example_collection]
レプリカセットの詳細については、 MongoDB Serverマニュアルのレプリカセット メンバーページを参照してください。
LocalThreshold
複数のレプリカセットノードが読み込み設定 (read preference)と 指定したタグセットと一致する場合、 Rubyドライバーはping時間に従って選択された、シャーディングされたクラスターの最も近いレプリカセットノードから読み取りを行います。
デフォルトでは、ドライバーは ping 時間が最も近いメンバーの15ミリ秒以内であるメンバーのみをクエリに使用します。 より高いレイテンシを持つメンバー間で読み取りを分散するには、 local_thresholdオプションをMongo::Clientコンストラクターに渡します。
次の例えでは、 35ミリ秒のローカルしきい値を指定します。
client = Mongo::Client.new( ['IP_ADDRESS_001:27017'], database: 'test_database', read: { mode: :secondary_preferred }, local_threshold: 35 ) database = client.database collection = database[:example_collection] result = collection.find({}).first puts result
前の例では 、 Rubyドライバーは、ノードのping時間の 35 ミリ秒以内に、一致するノード間で読み取りを分散します。
注意
Rubyドライバーは、mongosインスタンスを介してレプリカセットと通信するときに、local_threshold の値を無視します。この場合は、localThreshold コマンドライン オプション を使用します。
API ドキュメント
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。