數(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})