mongoDB簡介
簡介
mongoDB文檔數據庫妻坝,存儲的是文檔(Bson->json的二進制化)伸眶。
特點:其內部使用js解釋引擎來實現數據的分析,在插入的時候刽宪,將數據轉換成二進制的json來存儲厘贼,在查詢的時候,將數據轉換成json對象圣拄,方便處理嘴秸。需要注意:mongoDB主要是和node.js配合使用。
問題:與傳統關系型數據有什么區(qū)別庇谆?
答:沒有表結構的概念赁遗,傳統的關系型數據庫的數據必須按照表的結構來存儲(行、列形成的二維表)
在mongoDB中沒有表的概念族铆,將表換了一種稱呼岩四,叫做collection,對應表中記錄也換了一種稱呼哥攘,叫做document剖煌。它有數據庫的概念,就是多個collections組成的集合逝淹。
選項
關系型數據庫
mongoDB
redis
memcache
數據庫
yes
yes
no
no
數據表
yes(二維)
collection
no
no
記錄
yes(一行)
document(json對象)
key-values(string?link?hash?set?orderset)
key-values
安裝
1.下載對應的穩(wěn)定版源代碼耕姊,并放置到(/usr/local/src目錄下)
中文手冊:http://www.runoob.com/mongodb/mongodb-tutorial.html
2.解壓文件
#?tar?-zxvf?XXX.tar.gz
3.不需要編譯,因為官方已經編譯好栅葡,可以直接使用
4.啟動mongoDB如果mongoDB以后臺運行茉兰,必須加上--logpath后面必須要指定日志文件的名稱
#?./bin/mongod?--dbpath?/path/to/database?--logpath?/path/to/log.txt--fork?--port?27017
注意:
mongodb非常的占磁盤空間,剛啟動后要占3-4G左右,如果你用虛擬機練習欣簇,可能空間不夠,導致無法啟動规脸∨髟迹可以用--smallfiles選項來啟動,將會占用較小空間?莫鸭,400M左右闹丐。
參數解釋:
--dbpath數據存儲目錄
--logpath日志存儲目錄
--port運行端口(默認27017)
--fork后臺進程運行
mongoDB使用
入門命令
1.?show?dbs查看當前的數據庫
2.?use?databaseName選庫
3.?show?tables查看當前庫下的數據表
注意:即使數據不存在,也可以直接切換被因,會自己創(chuàng)建卿拴。但是如果在數據庫中不創(chuàng)建collection是不會顯示的。
創(chuàng)建數據庫
mongoDB的庫是隱式創(chuàng)建梨与,當use一個不存在的庫的時候堕花,在該庫下創(chuàng)建tables(collection)即可創(chuàng)建庫
創(chuàng)建表
1.顯式創(chuàng)建
db.createCollection(‘collectionName’)創(chuàng)建表
2.隱式創(chuàng)建
db.collectionName.insert(document)在插入數據的時候,隱式的創(chuàng)建
3.可以使用
show?tables查看當前數據庫下的表(collection)
show?collections也可以查看當前數據庫下的表(collection)
刪除表
db.collectionName.drop()刪除表
刪除數據庫
db.dropDatabase()刪除數據庫
基本增刪改查命令
注意:mongoDB又叫無模式(沒有嚴格意義上的數據結構)的文檔型(bson)的nosql(不使用SQL語句查詢)數據庫
注意:mongoDB會自動幫我們維持一個主鍵ID(_id)不需要也不建議手工的修改
增加數據insert
#?db.collectionName.isnert(document)注意這里的document是一個json對象
例如:
單條記錄:
#?db.collectionName.insert({_id:5,?age:18,?name:’asion’});
多條記錄
#?db.collectionName.insert(
[
{date:'2014-12-12',study:'mongodb'},
{_id:9,gender:'male',name:'caoyang'}
]
)
刪除數據remove
#?db.collection.remove(查詢表達式,選項);
選項是指{justOne:true/false},是否只刪一行,默認為false
注意
1:查詢表達式依然是個json對象
2:查詢表達式匹配的行粥鞋,將被刪掉
3:如果不寫查詢表達式航徙,tables中的所有文檔將被刪掉
例1:?db.students.remove({sn:’001’});
刪除students表中sn屬性值為’001’的數據
例2:?db.students.remove({gender:’m’},{justOne:true});
刪除students表中gender屬性為m的文檔,只刪除1行
修改數據update
#?db.collection.update(查詢表達式,新值)
注意
修改什么??--->查詢表達式指定
改成什么樣??-->新值?或?賦值表達式
例如:
#db.news.update({name:'asion'},{name:'caoyang'});
是指選中news表中陷虎,name值為qq的數據到踏,并把其文檔值改為{name:’caoyang’}
結果:文檔中的其他列不見了,改后只有_id和name列數據
注意-->新值直接替換了舊值尚猿,而不是修改窝稿,那我們設置的值做了一個全部的替換
所以:如果是想修改數據的某列,可以用$set關鍵字
#?db.collectionName.update({name:'asion'},?{$set:{name:’caoyang’}})
查詢數據find,?findOne
#?db.collection.find(查詢表達式,查詢的列);
#?db.collections.find(表達式,{列1:1,列2:1});
例1:db.students.find()
查詢students所有數據
例2:?db.students.find({},{gendre:1})
查詢所有數據的gender屬性(_id屬性默認總是查出來)
例3:?db.students.find({},{gender:1,?_id:0})
查詢所有文檔的gender屬性凿掂,且不查詢_id屬性
例3:?db.students.find({gender:’male’},?{name:1,?_id:0});
查詢所有gender屬性值為male的數據中的name屬性
中級技巧-查詢表達式
查詢表達式
在查詢時候的時候伴榔,使用的條件表達式
1.簡單的查詢表達式
{filed:value}
作用:是指查詢field列的值為value的數據
2:?$ne代表!=
{field:{$ne:value}}
作用:查出filed列的值不等于value的數據
注意:如果在開發(fā)中忘記了如何使用?
答:?善用help和百度
#?db.help()
#?db.user.help()
#?db.user1.help()
注意:HBase
php操作mongoDB
注意:如果要使用js來操作mongoDB庄萎,需要使用node.js這個服務器(js解釋器)作為名單客戶端來操作mongoDB
php-mongoDB擴展
1.下載源碼
2.上傳到/usr/local/src
3.執(zhí)行phpize命令
4.執(zhí)行make?&&?make?install
5.生成目錄
6.修改php.ini
9.重啟php-fpm
10.創(chuàng)建測試文件