1十办、 數(shù)據(jù)庫(kù)基礎(chǔ)命令
use mydb(建立數(shù)據(jù)庫(kù)):use不僅可以進(jìn)入一個(gè)數(shù)據(jù)庫(kù)仓犬,如果你敲入的庫(kù)不存在嗅绰,它還可以幫你建立一個(gè)庫(kù)。但是在沒(méi)有集合前搀继,它還是默認(rèn)為空窘面。
db.mydb.insert( ):新建數(shù)據(jù)集合和插入文件(數(shù)據(jù)),當(dāng)集合沒(méi)有時(shí)叽躯,這時(shí)候就可以新建一個(gè)集合财边,并向里邊插入數(shù)據(jù)。db.user.insert({name: "winerss"})
db.mydb.find( ):查詢所有數(shù)據(jù)点骑,這條命令會(huì)列出集合下的所有數(shù)據(jù)酣难,可以看到MongoDB是自動(dòng)給我們加入了索引值的。db.mydb.find()
db.mydb.findOne( ):查詢第一個(gè)文件數(shù)據(jù)黑滴,這里需要注意的憨募,所有MongoDB的組合單詞都使用首字母小寫(xiě)的駝峰式寫(xiě)法。
db.mydb.update({查詢},{修改}):修改文件數(shù)據(jù)袁辈,第一個(gè)是查詢條件菜谣,第二個(gè)是要修改成的值。這里注意的是可以多加文件數(shù)據(jù)項(xiàng)的db.mydb.update({"name":"winerss"},{"name":"winerss","age":"18"})晚缩。
db.mydb.remove(條件):刪除文件數(shù)據(jù)尾膊,注意的是要跟一個(gè)條件。db.mydb.remove({“name”:”winerss”})
db.mydb.drop( ):刪除整個(gè)集合荞彼,這個(gè)在實(shí)際工作中一定要謹(jǐn)慎使用冈敛,如果是程序,一定要二次確認(rèn)
db.dropDatabase( ):刪除整個(gè)數(shù)據(jù)庫(kù)卿泽,在刪除庫(kù)時(shí)莺债,一定要先進(jìn)入數(shù)據(jù)庫(kù)滋觉,然后再刪除。實(shí)際工作中這個(gè)基本不用齐邦,實(shí)際工作可定需要保留數(shù)據(jù)和痕跡的椎侠。
2、 批量插入
批量數(shù)據(jù)插入是以數(shù)組的方式進(jìn)行的: db.mydb.insert( [ {name: 'A'}, {name: 'B'} ] )
3措拇、update數(shù)據(jù)
db.mydb.update( {name: 'winerss'} , {name: '小明'} )
$set修改器:??用來(lái)修改一個(gè)指定的鍵值(key)我纪。假如現(xiàn)在的數(shù)據(jù)為{name: 'winerss'}
db.mydb.update( {name: 'winerss'} , { ‘$set’: {name: 'A', sex: '男'} } )? 字段并沒(méi)有sex,這時(shí)會(huì)添加sex字段丐吓,現(xiàn)在的數(shù)據(jù)為{name: 'A', sex:'男'}
$unset修改器:??它的作用其實(shí)就是刪除一個(gè)key值和鍵,?假如現(xiàn)在的數(shù)據(jù)為{name: 'A', sex: '男}
db.mydb.update( {name: 'A'} , { ‘$unset’: {sex: ''} } ) 現(xiàn)在的數(shù)據(jù)為{name: 'A'}
$inc對(duì)數(shù)字進(jìn)行計(jì)算:?它是對(duì)value值的修改浅悉,但是修改的必須是數(shù)字,字符串是不起效果的?假如現(xiàn)在的數(shù)據(jù)為{name: 'A', age:18}
db.mydb.update( {name: 'A'} , { ‘$inc’: {age: -2'} } )?現(xiàn)在的數(shù)據(jù)為{name: 'A', age:16}
multi選項(xiàng)?:?
現(xiàn)在我要給多條數(shù)據(jù)添加他們的技能券犁,執(zhí)行db.mydb.update({},{$set:{skills:[]}})后發(fā)現(xiàn)只有第一條添加了技能字段术健,
db.mydb.update({},{$set:{skills:[]}},{multi:true})這時(shí)候每個(gè)數(shù)據(jù)都發(fā)生了改變,multi是有ture和false兩個(gè)值粘衬,true代表全部修改荞估,false代表只修改一個(gè)(默認(rèn)值)
upsert選項(xiàng):?upsert是在找不到值的情況下,直接插入這條數(shù)據(jù)
db.mydb.update({name:'D'},{$set:{age:20}},{upsert:true})
?$push 追加數(shù)組/內(nèi)嵌文檔值
操作前數(shù)據(jù):{name: 'A', inserset: [ ] } ,? db.mydb.update({name:'A'},{$push:{interest:'mongodb'}}), 現(xiàn)在數(shù)據(jù){name: 'A', inserset: ['mongodb'] }
$net查找是否存在
它主要的作用是稚新,檢查一個(gè)值是否存在勘伺,如果不存在再執(zhí)行操作,存在就不執(zhí)行
db.mydb.update({name:'A',"interest":{$ne:'mysql'}},{$push:{interest:'mysql'}})
$addToSet升級(jí)版的$ne
它是$ne的升級(jí)版本(查找是否存在褂删,不存在就push上去)飞醉,操作起來(lái)更直觀和方便,所以再工作中這個(gè)要比$en用的多
db.mydb.update({name:"A"},{$addToSet:{interest:"books"}})
$each批量追加
它可以傳入一個(gè)數(shù)組屯阀,一次增加多個(gè)值進(jìn)去缅帘,相當(dāng)于批量操作,性能同樣比循環(huán)操作要好很多蹲盘,這個(gè)是需要我們注意的股毫,工作中也要先組合成數(shù)組,然后用批量的形式進(jìn)行操作召衔。
var skills=["javascript","Code"];
db.mydb.update({name:"A"},{$addToSet:{interest:{$each:skills}}})
$pop刪除數(shù)組值
只刪除一次铃诬,并不是刪除所有數(shù)組中的值。而且它有兩個(gè)選項(xiàng)苍凛,1:從數(shù)組末端進(jìn)行刪除和-1:從數(shù)組開(kāi)端進(jìn)行刪除
db.mydb.update({name:'xiaoWang'},{$pop:{interest:1}})
數(shù)組定位修改
有時(shí)候只知道修改數(shù)組的第幾位趣席,但并不知道是什么,這時(shí)候我們可以使用interest.int 的形式
db.mydb.update({name:'A'},{$set:{"interest.2":"Code"}})
4醇蝴、查詢:find的不等修飾符
簡(jiǎn)單查找
db.mydb.find({name: "A"})
篩選字段
?db.mydb.find({name: 'A'}, {name: true, sex: true,? _id: false}) 當(dāng)然這里的false和true宣肚,也可以用0和1表示。表示顯示的字段
?不等修飾符
小于($lt):英文全稱less-than
小于等于($lte):英文全稱less-than-equal
大于($gt):英文全稱greater-than
大于等于($gte):英文全稱greater-than-equal
不等于($ne):英文全稱not-equal
db.mydb.find({age: {$lte: 18, $gte: 10} }, {name: true, sex: true,? _id: false})
find的多條件查找:
?$in修飾符
$in修飾符可以輕松解決一鍵多值的查詢情況
db.mydb.find({age: {$in: [10, 18]} }, {name: true, sex: true,? _id: false})
?$or修飾符
它用來(lái)查詢多個(gè)鍵值的情況
db.mydb.find({$or: [{age: {$get: 20}}, {name: 'A'}]}, {name: true, sex: true,? _id: false})
?$and修飾符
$and用來(lái)查找?guī)讉€(gè)key值都滿足的情況
db.mydb.find({$and: [{age: {$get: 20}}, {name: 'A'}]}, {name: true, sex: true,? _id: false})
?$not修飾符
它用來(lái)查詢除條件之外的值
db.mydb.find({age:{ $not: {$gte: 20} } }, {name: true, sex: true,? _id: false})
?find的數(shù)組查詢
比如現(xiàn)在我們知道了一個(gè)人的愛(ài)好是’畫(huà)code’,’js’悠栓,但我們不知道是誰(shuí)霉涨,這時(shí)候我們就可以使用最簡(jiǎn)單的數(shù)組查詢(實(shí)際工作中按价,這種情況基本不常用,所以這種查詢只作知識(shí)點(diǎn)儲(chǔ)備就可以了)笙瑟。
db.mydb.find({ inserset: ['code', 'js'] }, {name: true, sex: true,? _id: false})
$all數(shù)組多項(xiàng)查詢
查詢出喜歡code的人員信息楼镐,也就是對(duì)數(shù)組中的對(duì)象進(jìn)行查詢,這時(shí)候要用到一個(gè)新的查詢修飾符$all往枷。
db.mydb.find({ inserset: {$all: 'code'} }, {name: true, sex: true,? _id: false})
$in數(shù)組的或者查詢
?用$all修飾符框产,是需要滿足所有條件的,$in主要滿足數(shù)組中的一項(xiàng)就可以被查出來(lái)(有時(shí)候會(huì)跟$or弄混)
db.mydb.find({ inserset: {$in: ['code', 'js']} }, {name: true, sex: true,? _id: false})
$size數(shù)組個(gè)數(shù)查詢
$size修飾符可以根據(jù)數(shù)組的數(shù)量查詢出結(jié)果错洁。比如現(xiàn)在我們要查找興趣的數(shù)量是5個(gè)人員信息秉宿,這時(shí)候就可以使用$size。
db.mydb.find({ inserset: {$size: 2} }, {name: true, sex: true,? _id: false})
$slice顯示選項(xiàng)
?有時(shí)候我并不需要顯示出數(shù)組中的所有值屯碴,而是只顯示前兩項(xiàng)描睦,比如我們現(xiàn)在想顯示每個(gè)人興趣的前兩項(xiàng),而不是把每個(gè)人所有的興趣都顯示出來(lái)导而。
db.mydb.find({}, {name: true, inserset: {$slice: 2},sex: true,? _id: false})
find的參數(shù)使用
query:這個(gè)就是查詢條件酌摇,MongoDB默認(rèn)的第一個(gè)參數(shù)。
fields:(返回內(nèi)容)查詢出來(lái)后顯示的結(jié)果樣式嗡载,可以用true和false控制是否顯示。
limit:返回的數(shù)量仍稀,后邊跟數(shù)字洼滚,控制每次查詢返回的結(jié)果數(shù)量。
skip:跳過(guò)多少個(gè)顯示技潘,和limit結(jié)合可以實(shí)現(xiàn)分頁(yè)遥巴。
sort:排序方式,從小到大排序使用1享幽,從大到小排序使用-1铲掐。
作一個(gè)最簡(jiǎn)單的分頁(yè),我們把同事集合(collections)進(jìn)行分頁(yè)值桩,每頁(yè)顯示兩個(gè)摆霉,并且按照年齡從小到大的順序排列
db.mydb.find({},{name:true,age:true,_id:false}).limit(0).skip(2).sort({age:1});
$where修飾符
它是一個(gè)非常強(qiáng)大的修飾符,但強(qiáng)大的背后也意味著有風(fēng)險(xiǎn)存在奔坟。它可以讓我們?cè)跅l件里使用javascript的方法來(lái)進(jìn)行復(fù)雜查詢携栋。我們先來(lái)看一個(gè)最簡(jiǎn)單的例子,現(xiàn)在要查詢年齡大于30歲的人員咳秉。
db.mydb.find({$where:"this.age>30"},{name:true,age:true,_id:false})