mongodb(二): 基本操作

數(shù)據(jù)庫切換

  • 查看當前數(shù)據(jù)庫的名稱
    db

  • 查看所有數(shù)據(jù)庫名稱
    列出所有在物理上存在的數(shù)據(jù)庫
    show dbs

  • 切換數(shù)據(jù)庫
    如果數(shù)據(jù)庫不存在,則指向數(shù)據(jù)庫欲鹏,但不創(chuàng)建巧还,直到插入數(shù)據(jù)或創(chuàng)建集合時數(shù)據(jù)庫才被創(chuàng)建
    use 數(shù)據(jù)庫名稱

  • 默認的數(shù)據(jù)庫為 test扛稽,如果你沒有創(chuàng)建新的數(shù)據(jù)庫,集合將存放在 test 數(shù)據(jù)庫中卖漫。

數(shù)據(jù)庫刪除

  • 刪除當前指向的數(shù)據(jù)庫
    如果數(shù)據(jù)庫不存在,則什么也不做
    db.dropDatabase()

集合創(chuàng)建

  • 語法
    db.createCollection(name, options)

name 是要創(chuàng)建的集合的名稱
options 是一個文檔弛槐,用于指定集合的配置
選項參數(shù) 是可選的懊亡,所以只需要到指定的集合名稱。以下是可以使用的選項列表:

  • 例1:不限制集合大小
    db.createCollection("stu")

  • 例2:限制集合大小乎串,后面學(xué)會插入語句后可以查看效果

  • 參數(shù) capped:默認值為 false店枣,表示不設(shè)置上限速警,值為 true 表示設(shè)置上限

  • 參數(shù) size:當 capped 為 true 時,需要指定此參數(shù)鸯两,表示上限大小闷旧,當文檔達到上限時,會將之前的數(shù)據(jù)覆蓋钧唐,單位為字節(jié)忙灼。
    db.createCollection("stu", {capped:true, size:10})

查看當前數(shù)據(jù)庫的集合

  • 語法
    show collections

刪除集合

  • 語法
    db.集合名稱.drop()

數(shù)據(jù)類型

以下是 MongoDB 中常用的幾種數(shù)據(jù)類型:

  • Object ID:文檔
  • String:字符串,最常用钝侠,必須是有效的 UTF-8
  • Boolean:存儲一個布爾值该园,true 或 false
  • Integer:整數(shù)可以是 32 位或 64 位,這取決于服務(wù)器
  • Double:存儲浮點值
  • Arrays:數(shù)組或列表帅韧,多個值存儲到一個鍵
  • Object:用于嵌入式的文檔里初,即一個值為一個文檔
  • Null:存儲 Null 值
  • Timestamp:時間戳
  • Date:存儲當前日期或時間的 UNIX 時間格式

object id

  • 每個文檔都有一個屬性,為 _id忽舟,保證每個文檔的唯一性
  • 可以自己去設(shè)置 _id 插入文檔
  • 如果沒有提供双妨,那么 MongoDB 為每個文檔提供了一個獨特的 _id,類型為 objectID
  • objectID 是一個 12 字節(jié)的十六進制數(shù):
  • 前 4 個字節(jié)為當前時間戳
  • 接下來是3個字節(jié)的機器 ID
  • 接下來是2個字節(jié)的 MongoDB 的服務(wù)進程 ID
  • 最后3個字節(jié)是簡單的增量值

插入

  • 語法
    db.集合名稱.insert(document)

  • 插入文檔時叮阅,如果不指定 _id 參數(shù) MongoDB 會為文檔分配一個唯一的 ObjectID

  • 例1:
    db.stu.insert({name:'gj',gender:1})

  • 例2:
    s1={_id:'20190101', name:'hr'}
    s1.gender=0
    db.stu.insert(s1)

簡單查詢

  • 語法

db.集合名稱.find()

更新

  • 語法
db.集合名稱.update(
    <query>,
    <update>,
    {multi: <boolean>}
)
  • 參數(shù) query:查詢條件刁品,類似 sql 語句 update 中的 where 部分

  • 參數(shù) update:更新操作符,類似 sql 語句 update 中 set 部分

  • 參數(shù) multi:可選浩姥,默認是 false挑随,表示只更新找到的第一條記錄,值為 true 表示把滿足條件的文檔全部更新

  • 例3:全文檔更新
    db.stu.update({name:'hr'}, {name:'mnc'})

  • 例4:指定屬性更新及刻,通過操作符 $set

db.stu.insert({name:'hr', gender:0})
db.stu.update({name:'hr'}, {$set:{name:'hys'}})
  • 例5:修改多條匹配到的數(shù)據(jù)
    db.stu.update({}, {$set:{gender:0}}, {multi:true})

保存

  • 語法
    db.集合名稱.save(document)

  • 如果文檔的 _id 已存在則修改镀裤,如果不存在則添加。

  • 例6:
    db.stu.save({_id:'20190102', 'name':'yk', gender:1})

  • 例7:
    db.stu.save({_id:'20190102', 'name':'wyk'})

刪除

  • 語法
db.集合名稱.remove(
    <query>,
    {
        justOne: <boolean>
    }
)
  • 參數(shù) query:可選缴饭,刪除的文檔的條件

  • 參數(shù) justOne:可選暑劝,如果設(shè)為 true 或 1,則只刪除一條颗搂,默認 false担猛,表示刪除多條

  • 例8:只刪除匹配到的第一條
    db.stu.remove({gender:0}, {justOne:true})

  • 例9:全部刪除
    db.stu.remove{(})

關(guān)于 SIZE 的示例

  • 創(chuàng)建集合

  • 例10
    db.createCollection('sub', {capped:true, size:10})

  • 插入第一條數(shù)據(jù),查詢
    db.sub.insert({title:'linux', count:10})
    db.sub.find()

  • 插入第二條數(shù)據(jù)丢氢,查詢
    db.sub.insert({title:'web', count:15})
    db.sub.find()

  • 插入第三條數(shù)據(jù)傅联, 查詢
    db.sub.insert({title:'sql', count:8})
    db.sub.find()

  • 插入第四條數(shù)據(jù), 查詢
    db.sub.insert({title:'django', count:12})
    db.sub.find()

  • 插入第五條數(shù)據(jù)疚察, 查詢
    db.sub.insert({title:'python', count:14})
    db.sub.find()


數(shù)據(jù)查詢

基本查詢

  • find() 方法:查詢
    db.集合名稱.find({條件文檔})

  • findOne() 方法:查詢蒸走,只返回第一個
    db.集合名稱.findOne({條件文檔})

  • pretty() 方法:將結(jié)果格式化
    db.集合名稱.find({條件文檔}).pretty()

比較運算符

  • 等于,默認是等于判斷貌嫡,沒有運算符

  • 小于 $lt

  • 小于或等于 $lte

  • 大于 $gt

  • 大于或等于 $gte

  • 例1:查詢名稱等于 gj 的學(xué)生
    db.stu.find({name:'gj'})

  • 例2:查詢年齡大于或等于 18 的學(xué)生
    db.stu.find({age:{$gte:18}})

邏輯運算符

  • 查詢時可以有多個條件比驻,多個條件之間需要通過邏輯運算符連接

  • 邏輯與:默認是邏輯與的關(guān)系

  • 例3:查詢年齡大于或等于 18该溯,并且性別為 1 的學(xué)生
    db.stu.find({age:{$gte:18}, gender:1})

  • 邏輯或:使用 $or

  • 例4:查詢年齡大于 18,或性別為0的學(xué)生
    db.stu.find({$or:[{age:{$gt:18}}, {gender:1}]})

  • and 和 or 一起使用

  • 例5:查詢年齡大于 18 或性別為 0 的學(xué)生别惦,并且學(xué)生的姓名為 gj
    db.stu.find({$or:[{age:{$gt:18}}, {gender:1}], name:'gj'})

范圍運算符

  • 使用 $in狈茉,$nin 來判斷是否在某個范圍內(nèi)
  • 例6:查詢年齡為 18,28 的學(xué)生
    db.stu.find({age:{$in:[18,28]}})

支持正則表達式

  • 使用 //$regex 編寫正則表達式
  • 例7:查詢姓黃的學(xué)生
    db.stu.find({name:/^黃/})
    db.stu.find({name:{$regex:'^黃'}})

自定義查詢

  • 使用 $where 后面寫一個函數(shù)掸掸,返回滿足條件的數(shù)據(jù)
  • 例7:查詢年齡大于 30 的學(xué)生

db.stu.find({$where:function(){return this.age>30}})

Limit

  • limit() 方法:用于讀取指定數(shù)量的文檔

  • 語法:
    db.集合名稱.find().limit(NUMBER)

  • 參數(shù) NUMBER 表示要獲取文檔的條數(shù)

  • 如果沒有指定參數(shù)則顯示集合所有文檔

  • 例1:查詢2條學(xué)生信息
    db.stu.find().limit(2)

skip

  • skip() 方法:用于跳過指定數(shù)量的文檔

  • 語法:
    db.集合名稱.find().skip(NUMBER)

  • 參數(shù) NUMBER 表示要跳過的記錄條數(shù)

  • 例2:查詢從第三條開始的學(xué)生信息

db.stu.find().skip(2)

一起使用

  • limit() 和 skip() 可以一起使用氯庆,不分先后順序

投影

  • 在查詢都的返回結(jié)果中,只選擇必要的字段扰付,而不是選擇一個文檔的所有字段

  • 如:一個文檔有5個字段堤撵,需要顯示的有3個,投影其中3個字段即可

  • 語法:

  • 參數(shù)為字段與值羽莺,值為1表示顯示粒督,0表示不顯示
    db.集合名稱.find({}, {字段名稱:1, ...})

  • 特殊:對于 _id 列,默認是顯示的禽翼,如果不顯示需要明確指定為0

  • 例1:
    db.stu.find({}, {name:1, gender:1})

  • 例2:
    db.stu.find({}, {_id:0, name:1, gender:1})

排序

統(tǒng)計個數(shù)

消除重復(fù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市族跛,隨后出現(xiàn)的幾起案子闰挡,更是在濱河造成了極大的恐慌,老刑警劉巖礁哄,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件长酗,死亡現(xiàn)場離奇詭異,居然都是意外死亡桐绒,警方通過查閱死者的電腦和手機夺脾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茉继,“玉大人咧叭,你說我怎么就攤上這事∷附撸” “怎么了菲茬?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長派撕。 經(jīng)常有香客問我婉弹,道長,這世上最難降的妖魔是什么终吼? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任镀赌,我火速辦了婚禮,結(jié)果婚禮上际跪,老公的妹妹穿的比我還像新娘商佛。我一直安慰自己喉钢,他們只是感情好,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布威彰。 她就那樣靜靜地躺著出牧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歇盼。 梳的紋絲不亂的頭發(fā)上舔痕,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音豹缀,去河邊找鬼伯复。 笑死,一個胖子當著我的面吹牛邢笙,可吹牛的內(nèi)容都是我干的啸如。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼氮惯,長吁一口氣:“原來是場噩夢啊……” “哼叮雳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妇汗,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤帘不,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后杨箭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寞焙,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年互婿,在試婚紗的時候發(fā)現(xiàn)自己被綠了捣郊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡慈参,死狀恐怖呛牲,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情懂牧,我是刑警寧澤侈净,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站僧凤,受9級特大地震影響畜侦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躯保,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一旋膳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧途事,春花似錦验懊、人聲如沸擅羞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽减俏。三九已至,卻和暖如春碱工,著一層夾襖步出監(jiān)牢的瞬間娃承,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工怕篷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留历筝,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓廊谓,卻偏偏與公主長得像梳猪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蒸痹,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容