上篇文章主要介绍了Ruby操作MongoDB数据的四个基本操作,创建文档,读取文档,更新文档和删除文档的操纵方式,命令和参数的使用方式。本章我们继续Ruby操作MongoDB的进阶学习,集合Collection。

与传统的关系型数据库不同,MongoDB数据库将文档存储在集合中。如果集合不存在,MongoDB数据将会在你第一次向集合中插入文档的时候创建这个集合。同样,你也可以通过多种诸如文档尺寸最大值和校验规则等可选参数显式地创建集合

  1. 固定集合

   固定集合有最大尺寸或文档个数的限制,从而确保集合不会增长到超过集合的限制。所有的固定集合都需要设定最大尺寸和最大文档个数。如果集合达到了最大尺寸的限制,但是未达到最大文档个数的限制,MongoDB数据库会移除集合中的创建时间较早的文档。

   在设定字节大小时使用capped:true属性则创建了固定集合。

   client=Mongo::Client.new(['127.0.0.1:27017'],:database=>'film')

   client[:actors,capped:true,size:10000].create

2.将一个已存在的集合转变为固定集合

   将一个已存在的非固定集合转变为固定集合,使用commond指令的convertToCapped参数。

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

   db=client.database

   db.commond({'convertToCapped'=>'contacts','size'=>8192})

3. 文档检验

   如果你使用3.2及其之后的MongoDB版本,你就可以使用文档校验功能。拥有检验功能的集合在接受插入或更新集合中文档时会与特定的校验规则进行比较。如果插入或更新文档时没有通过校验功能,取决于校验层级validationLevel和校验步骤validationAction,MongoDB要么会返回一个警告,要么会拒绝文档的插入和更新。

下面的实例创建了一个拥有校验器的contacts集合,在这个集合中进行插入和更新文档信息时,文档必须至少满足三个条件中的一个条件:

   phone字段为String类型

   email字段匹配了给定的正则表达式

   status状态字段要么是Unknown要么是Incomplete

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

   client[:actors,

         {

           'validator'=>{'$or'=>

          [

             {'phone'=>{'$type'=>"string"}},

             {'email'=>{'$regex'=>"/@mongodb\.com$/"}},

             {'status'=>{'$in'=>["Unknown","Incomplete"]}}

          ]

          }

          } 

         ].create

4. 现有集合增加校验功能

      通过commond指令的collMod属性实现对现有集合添加校验器的功能。下面的例子展示了怎样给contacts集合增加校验器,确保所有的文档都必须包含数字类型的age字段。

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

     db=client.database

     dn.commond({‘collMod’=>'contacts',

                  'validator'=>{'age'=>{'$type'=>"number"}}

            })

到此,MongoDB中集合的功能讲述完毕