Wechat: yu389741| Email: gisdqy@163.com

Shop:https://www.giserdqy.com/shop

31Ruby连接MongoDB操作



MongoDB Ruby驱动程序是MongoDB官方支持的Ruby驱动程序。它是用纯Ruby编写的,为了简化而进行了优化。它可以自己使用,但它也可以作为几个对象映射库的基础。

1.安装驱动程序

Ruby驱动程序是作为一个gem绑定的,并且托管在Rubygems上。

安装gem

驱动程序可以手动或捆绑式安装。手动安装gem

gem install mongo
Ruby

要使用捆绑安装gem,请在Gemfile中包含以下内容:

gem 'mongo', '~> 2.4'
Shell

2.前提条件

  • MongoDB实例在localhost上运行使用默认端口27017
  • Ruby MongoDB驱动程序。有关如何安装MongoDB驱动程序的说明,请参阅安装。
  • 代码顶部的以下语句:
require 'mongo'
Ruby

3.Ruby连接MongoDB

使用Mongo::Client建立与正在运行的MongoDB实例的连接。

require 'mongo'
client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'test')
Ruby

还可以使用URI连接字符串:

require 'mongo'
client = Mongo::Client.new('mongodb://127.0.0.1:27017/test')
Ruby

4.访问数据库和集合

以下示例演示如何访问指定数据库并显示其集合:

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
Ruby

要访问一个集合,请按名称查看。

collection = client[:restaurants]
Ruby

如果集合不存在,服务器将在第一次放入数据时创建。

插入文档

要将单个文档插入到集合中,请使用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
Ruby

要将多个文档插入到集合中,请使用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
Shell

查询集合

使用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
Ruby

使用查询过滤器只找到匹配的文档。

client = Mongo::Client.new('mongodb://127.0.0.1:27017/test')
collection = client[:people]

puts collection.find( { name: 'Sally' } ).first
Ruby

该示例应该会打印以下内容:

{"_id" => 2, "name" => "Sally", "hobbies" => ["skiing", "stamp collecting"]}
Shell

更新文件

有几种更新方法,包括:update_oneupdate_manyupdate_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
Ruby

删除文档

使用delete_onedelete_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
Ruby

以下示例将两个记录插入到集合中,然后使用与正则表达式匹配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
Ruby

创建索引

使用create_onecreate_many方法一次创建一个索引或多个索引。

client = Mongo::Client.new('mongodb://127.0.0.1:27017/test')
collection = client[:people]

collection.indexes.create_one({ name: 1 }, unique: true)
Ruby

使用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

 关注右侧公众号,随时随地查看教程 MongoDB教程目录 
转载自:https://www.yiibai.com/mongodb/mongodb_ruby.html