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