一、安裝MongoDB
1、安裝MongoDB
rpm包下載下傳位址:http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/RPMS/
2、檢視rpm包生成的幾個重要檔案
3、初始化資料庫
說明:實際使用中将存放資料的目錄放在有備援的邏輯卷上。
4、啟動資料庫
5、MongoDB的web接口
二、使用MongoDB
1、MongoDB與MySQL文法對比
傳統的關系資料庫一般由資料庫(database)、表(table)、記錄(record)三個層次概念組成,MongoDB是由資料庫(database)、集合(collection)、文檔對象(document)三個層次組成。MongoDB對于關系型資料庫裡的表,但是集合中沒有列、行和關系概念,這展現了模式自由的特點。
2、mongodb文法
查詢colls所有資料
通過指定條件查詢
指定多條件查詢
指定條件範圍查詢
查詢不包括某内容
支援<, <=, >, >=查詢,需用符号替代分别為$lt,$lte,$gt,$gte
也可對某一字段做範圍查詢
不等于查詢用字元$ne
in查詢用字元$in
not in查詢用字元$nin
取模查詢用字元$mod
$all查詢
$size查詢
$exists查詢
$type查詢$type值為bsonhttp://bsonspec.org/數 據的類型值
使用正規表達式比對
内嵌對象查詢
1.3.3版本及更高版本包含$not查詢
sort()排序
limit()對限制查詢資料傳回個數
skip()跳過某些資料
snapshot()快照保證沒有重複資料傳回或對象丢失
count()統計查詢對象個數
group()對查詢結果分組和SQL中group by函數類似
distinct()傳回不重複值
3、查詢語句說明:
類似于SQL中select語句,其中<query>相當于where子句,而<projection>相當于要標明的字段。
如果使用的find()方法中不包含<query>,則意味着要傳回對應collection的所有文檔。
“db.collection.count()”方法可以統計指定collection中文檔的個數。
比較運算:
$gt:挑選指定字段值大于指定值的文檔,文法格式“{field: {$gt: value}}”;
$gte:挑選指定字段值大于等于指定值的文檔,文法格式“{field: $gte: value}”;
$in:挑選指定字段的值位于指定數組中的文檔,文法格式“{filed: {$in: [<value1>,<value2>,...<valueN>]}}”;
$lt:挑選指定字段值小于指定值的文檔,文法格式“{field: {$lt: value}}”;
$lte:挑選指定字段值小于等于指定值的文檔,文法格式“{field: {$lte: value}}”;
$ne:挑選指定字段值不等于指定值的文檔,文法格式“{filed: {$ne: value}}”;
$nin:挑選指定字段的值沒有位于指定數組中或不存在的文檔,文法格式“{filed: {$nin: [<value1>,<value2>...valueN]}}”;
邏輯運算:
邏輯運算一般用于連接配接多個選擇條件,MongoDB支援的邏輯運算“Query Selector”有以下幾種:
$or:或運算,語句格式“{$or: [{<expression1>},{<expression2>},... ,{<expressionN>}]}”
$and:與運算,文法格式“{$and: [{<expression1>},{<expression2>},... ,{<expressionN>}]}”
$and:非運算,文法格式“{field: {$not: {<operator expression>}}}”
$nor:反運算,即傳回不符合所有指定條件的文檔,文法格式“$nor: [{<expression1>},{<expression2>},.... ,{<expressionN>}]}”
元素查詢:
如果要根據文檔中是否存在某字段等條件來挑選文檔,則需要用到元素運算。
$exixts:根據指定字段的存在性挑選文檔,文法格式“{ field: {$exists: <boolean>}}”,指定<boolean>的值為“true”則傳回存在指定字段的文檔,“false”則傳回不存在指定字段的文檔。
$mod:将指定字段的值進行取模運算,并傳回其餘數為指定值的文檔,文法格式“{field: {$mod: [divisor, remainder]}}”。
$type:傳回指定字段的值類型為指定類型的文檔,文法格式“{field: {$type: <BSON type>}}”。
3、實際練習
連入資料庫
資料的插入
檢視狀态:
就插入了兩條資料而占用了100多M的空間,說明很占用存儲空間。
mongodb占用空間過大的原因,在官方的FAQ中,提到有如下幾個方面:
空間的預配置設定:為避免形成過多的硬碟碎片,mongodb每次空間不足時都會申請生成一大塊的硬碟空間,而且申請的量從64M、128M、 256M那樣的指數遞增,直到2G為單個檔案的最大體積。随着資料量的增加,你可以在其資料目錄裡看到這些整塊生成容量不斷遞增的檔案。
字段名所占用的空間:為了保持每個記錄内的結構資訊用于查詢,mongodb需要把每個字段的key-value都以BSON的形式存儲,如果 value域相對于key域并不大,比如存放數值型的資料,則資料的overhead是最大的。一種減少空間占用的方法是把字段名盡量取短一些,這樣占用 空間就小了,但這就要求在易讀性與空間占用上作為權衡了。我曾建議作者把字段名作個index,每個字段名用一個位元組表示,這樣就不用擔心字段名取多長 了。但作者的擔憂也不無道理,這種索引方式需要每次查詢得到結果後把索引值跟原值作一個替換,再發送到用戶端,這個替換也是挺耗費時間的。現在的實作算是 拿空間來換取時間吧。
删除記錄不釋放空間:這很容易了解,為避免記錄删除後的資料的大規模挪動,原記錄空間不删除,隻标記“已删除”即可,以後還可以重複利用。
可以定期運作db.repairDatabase()來整理記錄,但這個過程會比較緩慢。
删除collections:
添加練習例子:
檢視前兩行文檔:
删除年齡為5的文檔:
删除使用者為User:3的文檔:
将User:4使用者的年齡改為22:
檢視test庫的文檔數,及年齡大于97的文檔:
查詢年齡大于97的文檔并隻顯示Name和Age:
查詢Age大于60并小于66的文檔:
查詢包含Adress字段的文檔:
将Age大于98文檔中的Gender改為M:
将Name為User:99的文檔中PreferBooks項給删除: