Ruby ドライバー クイックスタート
項目一覧
前提条件
デフォルト ポート 27017 を使用して、ローカルホスト上で実行中の MongoDB インスタンス。
Ruby MongoDB ドライバー。 MongoDB ドライバーをインストールする方法については、「 のインストール」を参照してください。
コードの上部に次のステートメントが含まれます。
require 'mongo'
接続を行う
実行中の MongoDB インスタンスへの接続を確立するには、 Mongo::Client
を使用します。
client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
URI 接続stringを使用することもできます。
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test')
Tip
以下も参照してください。
データベースとコレクションへのアクセス
次の例は、特定のデータベースにアクセスし、そのコレクションを表示する方法を示しています。
client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test') db = client.database db.collections # returns a list of collection objects db.collection_names # returns a list of collection names db.list_collections # returns a list of collection metadata hashes
コレクションにアクセスするには、コレクションを名前で参照します。
collection = client[:restaurants]
コレクションが存在しない場合、サーバーは最初にデータを入力するときにコレクションを作成します。
ドキュメントの挿入
コレクションに単一のドキュメントを挿入するには、 insert_one
メソッドを使用します。
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test') collection = client[:people] doc = { name: 'Steve', hobbies: [ 'hiking', 'tennis', 'fly fishing' ], siblings: { brothers: 0, sisters: 1 } } result = collection.insert_one(doc) result.n # returns 1, because one document was inserted
コレクションに複数のドキュメントを挿入するには、 insert_many
メソッドを使用します。
docs = [ { _id: 1, name: 'Steve', hobbies: [ 'hiking', 'tennis', 'fly fishing' ], siblings: { brothers: 0, sisters: 1 } }, { _id: 2, name: 'Sally', hobbies: ['skiing', 'stamp collecting' ], siblings: { brothers: 1, sisters: 0 } } ] result = collection.insert_many(docs) result.inserted_count # returns 2 because two documents were inserted
コレクションをクエリする
コレクション クエリを作成するには、 find
メソッドを使用します。
空のクエリフィルターは、コレクション内のすべてのドキュメントを返します。
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test') collection = client[:people] collection.find.each do |document| #=> Yields a BSON::Document. end
一致するドキュメントのみを検索するには、クエリフィルターを使用します。
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test') collection = client[:people] puts collection.find( { name: 'Sally' } ).first
例では、次の内容が出力されます。
{"_id" => 2, "name" => "Sally", "hobbies" => ["skiing", "stamp collecting"], "siblings" => { "brothers": 1, "sisters": 0 } }
一致するキーと値を指定して、ネストされたドキュメントをクエリします。
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test') collection = client[:people] puts collection.find("siblings.sisters": 1 ).first
例では、次の内容が出力されます。
{"_id"=>1, "name"=>"Steve", "hobbies"=>["hiking", "tennis", "fly fishing"], "siblings"=>{"brothers"=>0, "sisters"=>1}}
Update Documents
更新方法は複数あり、 update_one
やupdate_many
などがあります。 update_one
は単一のドキュメントを更新し、 update_many
は複数のドキュメントを一度に更新します。
どちらのメソッドも引数として、クエリフィルター ドキュメントと、更新データを持つ 2 番目のドキュメントを受け取ります。 特定のフィールドを追加または更新するには、 $set
を使用します。 $set
を使用しない場合、既存のドキュメント全体が更新データに置き換えられます。
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test') collection = client[:people] result = collection.update_one( { 'name' => 'Sally' }, { '$set' => { 'phone_number' => "555-555-5555" } } ) puts collection.find( { 'name' => 'Sally' } ).first
例では、次の内容が出力されます。
{"_id" => 2, "name" => "Sally", "hobbies" => ["skiing", "stamp collecting"], "phone_number" => "555-555-5555"}
次の例では、 update_many
と空白のクエリフィルターを使用して、コレクション内のすべてのドキュメントを更新しています。
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test') collection = client[:people] result = collection.update_many( {}, { '$set' => { 'age' => 36 } } ) puts result.modified_count # returns 2 because 2 documents were updated
Delete Documents
コレクションからドキュメントを削除するには(単一または複数のドキュメントを一度に削除します)、 delete_one
メソッドまたはdelete_many
メソッドを使用します。
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test') collection = client[:people] result = collection.delete_one( { name: 'Steve' } ) puts result.deleted_count # returns 1 because one document was deleted
次の例では、 コレクションにさらに 2 つのレコードを挿入し、正規表現に一致するname
フィールドを持つすべてのドキュメントを削除して、「S」で始まる string を検索します。
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test') collection = client[:people] collection.insert_many([ { _id: 3, name: "Arnold" }, { _id: 4, name: "Susan" } ]) puts collection.count # counts all documents in collection result = collection.delete_many({ name: /$S*/ }) puts result.deleted_count # returns the number of documents deleted
インデックスの作成
create_one
メソッドまたはcreate_many
メソッドを使用して、インデックスを単一または複数に一度に作成します。
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test') collection = client[:people] collection.indexes.create_one({ name: 1 }, unique: true)
1 つのステートメントで複数のインデックスを作成するには、 create_many
メソッドを使用します。 create_many
を使用する場合、構文はcreate_one
とは異なることに注意してください。
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test') collection = client[:people] collection.indexes.create_many([ { key: { name: 1 } , unique: true }, { key: { hobbies: 1 } }, ])
完全なサンプルアプリ
Rubyいくつかの一般的なユースケースで ドライバーを使用するサンプルアプリは、Github からダウンロードできます。 。