上篇文章主要介紹了Ruby操作MongoDB數據的四個基本操作,創建文檔,讀取文檔,更新文檔和刪除文檔的操縱方式,命令和參數的使用方式。本章我們繼續Ruby操作MongoDB的進階學習,集合Collection。
與傳統的關係型數據庫不同,MongoDB數據庫將文檔存儲在集合中。如果集合不存在,MongoDB數據將會在你第一次向集合中插入文檔的時候創建這個集合。同樣,你也可以通過多種諸如文檔尺寸最大值和校驗規則等可選參數顯式地創建集合
固定集合
固定集合有最大尺寸或文檔個數的限制,從而確保集合不會增長到超過集合的限制。所有的固定集合都需要設定最大尺寸和最大文檔個數。如果集合達到了最大尺寸的限制,但是未達到最大文檔個數的限制,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中集合的功能講述完畢