mongodb(二): 基本操作

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

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

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

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

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

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

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

集合創(chuàng)建

  • 語法
    db.createCollection(name, options)

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

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

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

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

  • 參數(shù) size:當(dāng) capped 為 true 時(shí),需要指定此參數(shù),表示上限大小,當(dāng)文檔達(dá)到上限時(shí),會(huì)將之前的數(shù)據(jù)覆蓋,單位為字節(jié)。
    db.createCollection("stu", {capped:true, size:10})

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

  • 語法
    show collections

刪除集合

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

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

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

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

object id

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

插入

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

  • 插入文檔時(shí),如果不指定 _id 參數(shù) MongoDB 會(huì)為文檔分配一個(gè)唯一的 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:可選,默認(rèn)是 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,則只刪除一條,默認(rèn) 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() 方法:查詢,只返回第一個(gè)
    db.集合名稱.findOne({條件文檔})

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

比較運(yùn)算符

  • 等于,默認(rèn)是等于判斷,沒有運(yùn)算符

  • 小于 $lt

  • 小于或等于 $lte

  • 大于 $gt

  • 大于或等于 $gte

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

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

邏輯運(yùn)算符

  • 查詢時(shí)可以有多個(gè)條件,多個(gè)條件之間需要通過邏輯運(yùn)算符連接

  • 邏輯與:默認(rèn)是邏輯與的關(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'})

范圍運(yùn)算符

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

支持正則表達(dá)式

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

自定義查詢

  • 使用 $where 后面寫一個(gè)函數(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é)果中,只選擇必要的字段,而不是選擇一個(gè)文檔的所有字段

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

  • 語法:

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

  • 特殊:對(duì)于 _id 列,默認(rèn)是顯示的,如果不顯示需要明確指定為0

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

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

排序

統(tǒng)計(jì)個(gè)數(shù)

消除重復(fù)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容