mongodb介紹
1.什么是mongodb?
- mongodb 是由c++語言編寫的嗡善,是一個(gè)基于分布式文件存儲(chǔ)的開源數(shù)據(jù)庫系統(tǒng)锦针,在高負(fù)荷的情況下玖翅,添加更多的節(jié)點(diǎn)唐全,可以保證服務(wù)的性能
- MongoDB 旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。
- MongoDB 將數(shù)據(jù)存儲(chǔ)為一個(gè)文檔接癌,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對(duì)組成心赶。MongoDB 文檔類似于 JSON 對(duì)象。字段值可以包含其他文檔扔涧,數(shù)組及文檔數(shù)組。
三元素: 數(shù)據(jù)庫、集合枯夜、文檔
數(shù)據(jù)庫是一個(gè)集合的物理容器
集合就是關(guān)系數(shù)據(jù)庫中的表
文檔對(duì)應(yīng)著關(guān)系數(shù)據(jù)庫中的行
1). 文檔弯汰,就是一個(gè)對(duì)象,由鍵值對(duì)構(gòu)成湖雹,是json的擴(kuò)展Bson形式 {'name':'guojing','gender':'男’}
2). 集合:類似于關(guān)系數(shù)據(jù)庫中的表咏闪,儲(chǔ)存多個(gè)文檔,結(jié)構(gòu)不固定摔吏,如可以存儲(chǔ)如下文檔在一個(gè)集合中 {'name':'guojing','gender':'男'} {'name':'huangrong','age':18} {'book':'shuihuzhuan','heros':'108’}
3). 一個(gè)mongodb中可以建立多個(gè)數(shù)據(jù)庫
4). 數(shù)據(jù)庫:是一個(gè)集合的物理容器鸽嫂,一個(gè)數(shù)據(jù)庫中可以包含多個(gè)集合
5). 集合:集合中可以存儲(chǔ)多個(gè)文檔
6). 文檔:就是一個(gè)對(duì)象,由鍵值對(duì)構(gòu)成征讲,是json的擴(kuò)展Bson(可以理解為在JSON的基礎(chǔ)上添加了一些json中沒有的數(shù)據(jù)類型)形式据某。 需要注意的是:
2.mongodb啟動(dòng)
1.啟動(dòng)
sudo service mongodb start
2.停止
sudo service mongodb stop
3.重置
sudo service mongdb restop
4.退出鏈接
exit/ctrl+c
3.數(shù)據(jù)庫、集合相關(guān)操作
數(shù)據(jù)庫基本命令
1.查看當(dāng)前數(shù)據(jù)庫
db
- 列出所有數(shù)據(jù)庫
show dbs
3.切換數(shù)據(jù)庫诗箍,如果不存在癣籽,則指向但不創(chuàng)建,直到插入數(shù)據(jù)或者創(chuàng)建集合時(shí)數(shù)據(jù)庫才被創(chuàng)建
use 數(shù)據(jù)庫名
4.查看當(dāng)前數(shù)據(jù)庫信息
db.stats()
5.刪除數(shù)據(jù)庫
db.dropDatabase()
集合的相關(guān)操作
1.創(chuàng)建集合
db.createCollection(name,options)
name是要?jiǎng)?chuàng)建的集合的名稱
options是一個(gè)文檔滤祖,用于指定集合的配置 選項(xiàng)??參數(shù)是可選的筷狼,所以只需要到指定的集合名稱
options參數(shù):
capped 布爾(可選)如果為 true,則創(chuàng)建固定集合匠童。固定集合是指有著固定大小的集合埂材,當(dāng)達(dá)到最大值時(shí),它會(huì)自動(dòng)覆蓋最早的文檔汤求。 當(dāng)該值為 true 時(shí)俏险,必須指定 size 參數(shù)。
autoIndexId 布爾 (可選)如為 true首昔,自動(dòng)在 _id 字段創(chuàng)建索引寡喝。默認(rèn)為 false。
size 數(shù)值 (可選)為固定集合指定一個(gè)最大值.當(dāng)文檔達(dá)到上限時(shí)勒奇,會(huì)將之前的數(shù)據(jù)覆蓋预鬓,單位為字節(jié)。如果 capped 為 true赊颠,也需要指定該字段格二。
max 數(shù)值 (可選)指定固定集合中包含文檔的最大數(shù)量。
2.查看數(shù)據(jù)庫集合
show collections
3.刪除集合
db.集合名稱.drop()
3.數(shù)據(jù)的增刪改查
1.插入文檔
- 單條插入
db.集合名稱.insert({文檔})
查詢?nèi)课臋n
db.集合名稱.find()
更新文檔
- update() 方法用于更新已存在的文檔
db.集合名稱.update()
參數(shù):
query : update的查詢條件竣蹦,類似sql update查詢內(nèi)where后面的顶猜。
update : update的對(duì)象和一些更新的操作符(如
inc...)等,也可以 理解為sql update查詢內(nèi)set后面的
upsert : 可選痘括,這個(gè)參數(shù)的意思是长窄,如果不存在update 的記錄滔吠,是否插入objNew,true為插入,默認(rèn)是false挠日,不插 入疮绷。
multi : 可選,mongodb 默認(rèn)是false,只更新找到的第 一條記錄嚣潜,如果這個(gè)參數(shù)為true,就把按條件查出來多條記錄 全部更新冬骚。
全文檔更新
db.stu.update(
{name:'趙文竹'},
{name:'哈哈哈'}
)
指定屬性更新,通過操作符$se
db.stu.update(
{name:'趙文竹'}懂算,
{
$set:{name:'啦啦啦'}
}
)
修改多條匹配到的數(shù)據(jù)
db.stu.update(
{name:'趙文竹'}只冻,
{
$set:{name:'啦啦啦'}
},
{multi:true}
)
2.save() 方法通過傳入的文檔來替換已有文檔计技,如果文檔的_id已經(jīng)存在則修改喜德,不存在則添加
db.stu.update(
{name:'趙文竹'},
{
$set:{name:'啦啦啦'}
}
)
pretty()
該函數(shù)酸役,講數(shù)據(jù)以格式化的方法展示
db.集合名稱.find().pretty()
刪除文檔
db.集合名稱.remove(document)
remove()方法基本格式:
db.collection.remove(
<query>,
{justOne: <boolean>,}
)
參數(shù)說明
query :(可選)刪除的文檔的條件住诸。
justOne : (可選)如果設(shè)為 true 或 1,則只刪除一個(gè)文檔涣澡。
基本的數(shù)據(jù)查詢
查全部
db.集合名稱.find({條件文檔})
查一個(gè)
db.集合名稱.findOne({條件文檔})
比較運(yùn)算符
等于贱呐,默認(rèn)是等于判斷,沒有運(yùn)算符
小于lte
大于gte
不等于$ne
例:查詢年齡大于或等于18的學(xué)生
db.stu.find({age:{$gte:18}})
邏輯運(yùn)算符
1.默認(rèn)是邏輯與的關(guān)系
2.邏輯或使用$or
db.stu.find(
{
$or:[
{age:{$gt:18}},
{gender:1}
]
}
)
3.and和or一起使用
例5:查詢年齡大于18或性別為0的學(xué)生入桂,并且學(xué)生的姓名為gj
db.stu.find(
{
$or:[
{age:{$gte:18}},
{gender:1}
],
name:'gj'
}
)
范圍運(yùn)算符
$in $nin判斷是否在某個(gè)范圍內(nèi)
db.stu.find(
{
age:{$in:[18,28]}
}
)
支持正則表達(dá)式
使用//或者$regex編寫正則表達(dá)式
db.stu.find(
{name:/^李/}
)
db.stu.find(
{
name:{$regex:'^李'}
}
)
$type
獲取某一種類型的數(shù)據(jù)奄薇,使用$type
db.col.find(
{
"title" : {$type : 'string'}
}
)
limit 與Skip方法
limit() 方法 讀取指定數(shù)量的數(shù)據(jù)記錄
db.集合名稱.find().limit(num)
Skip() 方法 使用skip()方法來跳過指定數(shù)量的數(shù)據(jù),skip方法同樣接受一個(gè)數(shù)字參數(shù)作為跳過的記錄條數(shù)抗愁。
db.集合名稱.find().skip(num)
limit() 方法馁蒂、Skip() 方法 同時(shí)使用,不分先后順序 表示跳過多少條蜘腌,返回多少條
sort() 方法排序
** sort() **方法對(duì)數(shù)據(jù)進(jìn)行排序沫屡,sort() 方法可以通過參數(shù)指定排序的字段,并使用 1 和 -1 來指定排序的方式撮珠,其中 1 為升序排列沮脖,而 -1 是用于降序排列。
升序
db.集合名稱.find().sort({排序字段:1})
降序
db.集合名稱.find().sort({排序字段:-1})
注意: skip(), limilt(), sort()三個(gè)放在一起執(zhí)行的時(shí)候芯急,執(zhí)行的順序是先 sort(), 然后是 skip()勺届,最后是顯示的 limit()。
distinct() 去重
db.集合名稱.distinct('去重字段',{條件})
例:查找年齡大于20的姓名(去重)
db.集合名稱.distinct('name',{age:{$gt:20}})
project投影(可以指定想要返回的字段)
在查詢到的返回結(jié)果中娶耍,只選擇必要的字段免姿,而不是選擇一個(gè)文檔的整個(gè)字段
參數(shù)為字段與值,值為1表示顯示榕酒,值為0不顯示
db.集合名稱.find({},{字段名稱:0,...})
count() 統(tǒng)計(jì)個(gè)數(shù)
db.集合名稱.count({條件})
表示返回集合中的文檔數(shù)量
db.集合名稱.find().count()
db.集合名稱.find({條件}).count()
在count()函數(shù)中添加條件
例:統(tǒng)計(jì)年齡大于20的男生人數(shù)
db.集合名稱.count(
{
age:{$gt:20},
gender:1
}
)