MongoDB Ruby驅動程式是MongoDB官方支援的Ruby驅動程式。它是用純Ruby編寫的,為了簡化而進行了優化。它可以自己使用,但它也可以作為幾個物件對映庫的基礎。
Ruby驅動程式是作為一個gem
係結的,並且託管在Rubygems上。
安裝gem
驅動程式可以手動或捆綁式安裝。手動安裝gem
:
gem install mongo
要使用綑綁安裝gem
,請在Gemfile
中包含以下內容:
gem 'mongo', '~> 2.4'
localhost
上執行使用預設埠27017
。require 'mongo'
使用Mongo::Client
建立與正在執行的MongoDB
範例的連線。
require 'mongo'
client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
還可以使用URI連線字串:
require 'mongo'
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test')
以下範例演示如何存取指定資料庫並顯示其集合:
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
要存取一個集合,請按名稱檢視。
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' ] }
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' ] },
{ _id: 2, name: 'Sally', hobbies: ['skiing', 'stamp collecting' ] } ]
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"]}
有幾種更新方法,包括:update_one
和update_many
。 update_one
更新單個文件,而update_many
會一次更新多個文件。
這兩種方法都將查詢過濾器作為第一個引數,以及更新文件的資料作為第二個引數。 使用$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
使用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
以下範例將兩個記錄插入到集合中,然後使用與正規表示式匹配name
欄位查詢,刪除那些以「S
」開頭的字串的所有文件。
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)
使用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 } },
])