Ruby 驱动程序快速入门
先决条件
使用默认端口 27017 在本地主机上运行的 MongoDB 实例。
Ruby MongoDB驾驶员。 有关如何安装MongoDB驾驶员的说明,请参阅安装。
代码最上方有以下语句:
require 'mongo'
建立连接
使用 Mongo::Client
建立与正在运行的 MongoDB 实例的连接。
client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
您也可以使用 URI 连接字符串:
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 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
一次更新多个文档。
两种方法都将查询过滤器文档和包含更新数据的第二个文档作为参数。使用 $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
以下示例将另外两条记录插入集合中,然后删除 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
createIndexes
使用 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 } }, ])
完整示例应用
将Ruby 驾驶员用于几种常见用例的示例应用程序可以从Github 下载 。