1. mongodb資料庫的命令 查看當前的資料庫:db 查看所有的資料庫:show dbs /show databases 切換資料庫:use db_name 刪除當前的資料庫:db.dropDatabase() 2. mongodb集合的命令 不手動創建集合: 向不存在的集合中第⼀次加⼊數據時, ...
1. mongodb資料庫的命令
- 查看當前的資料庫:db
- 查看所有的資料庫:show dbs /show databases
- 切換資料庫:use db_name
- 刪除當前的資料庫:db.dropDatabase()
2. mongodb集合的命令
- 不手動創建集合: 向不存在的集合中第⼀次加⼊數據時, 集合會被創建出來
- 手動創建結合:
- db.createCollection(name,options)
- db.createCollection("stu")
- db.createCollection("sub", { capped : true, size : 10 } )
- 參數capped: 預設值為false表示不設置上限,值為true表示設置上限
- 參數size: 當capped值為true時, 需要指定此參數, 表示上限⼤⼩,當⽂檔達到上限時, 會將之前的數據覆蓋, 單位為位元組
- 查看集合:show collections
- 刪除集合:db.集合名稱.drop()
3. mongodb中常見的數據類型
3.1 常見類型
- Object ID: ⽂檔ID
- String: 字元串, 最常⽤, 必須是有效的UTF-8
- Boolean: 存儲⼀個布爾值, true或false
- Integer: 整數可以是32位或64位, 這取決於伺服器
- Double: 存儲浮點值
- Arrays: 數組或列表, 多個值存儲到⼀個鍵
- Object: ⽤於嵌⼊式的⽂檔, 即⼀個值為⼀個⽂檔
- Null: 存儲Null值
- Timestamp: 時間戳, 表示從1970-1-1到現在的總秒數
- Date: 存儲當前⽇期或時間的UNIX時間格式
3.2 註意點
- 創建⽇期語句如下 :參數的格式為YYYY-MM-DD new Date('2017-12-20')
-
每個⽂檔都有⼀個屬性, 為_id, 保證每個⽂檔的唯⼀性
可以⾃⼰去設置_id插⼊⽂檔,如果沒有提供, 那麼MongoDB為每個⽂檔提供了⼀個獨特的_id, 類型為objectID
-
objectID是⼀個12位元組的⼗六進位數,每個位元組兩位,一共是24 位的字元串: 前4個位元組為當前時間戳 接下來3個位元組的機器ID 接下來的2個位元組中MongoDB的服務進程id 最後3個位元組是簡單的增量值
4. mongodb的增刪改查
知識點:
- 掌握mongodb的插入和保存
- 掌握mongodb的更新操作
- 掌握mongodb的查詢操作
- 掌握mongodb的更新操作
- 掌握mongodb的刪除操作
4.1 mongodb的插入
-
db.集合名稱.insert(document)
db.stu.insert({name:'gj',gender:1}) db.stu.insert({_id:"20170101",name:'gj',gender:1})
插⼊⽂檔時, 如果不指定_id參數, MongoDB會為⽂檔分配⼀個唯⼀的ObjectId
4.2 mongodb的保存
命令:db.集合名稱.save(document)
如果⽂檔的_id已經存在則修改, 如果⽂檔的_id不存在則添加
4.3 mongodb的簡單查詢
命令:db.集合名稱.find()
4.4 mongodb的更新
命令:db.集合名稱.update(<query> ,<update>,{multi: <boolean>})
- 參數query:查詢條件
- 參數update:更新操作符
- 參數multi:可選, 預設是false,表示只更新找到的第⼀條記錄, 值為true表示把滿⾜條件的⽂檔全部更新
db.stu.update({name:'hr'},{name:'mnc'}) 更新一條
db.stu.update({name:'hr'},{$set:{name:'hys'}}) 更新一條
db.stu.update({},{$set:{gender:0}},{multi:true}) 更新全部
註意:"multi update only works with $ operators"
4.5 mongodb的刪除
命令:db.集合名稱.remove(<query>,{justOne: <boolean>})
- 參數query:可選,刪除的⽂檔的條件
- 參數justOne:可選, 如果設為true或1, 則只刪除⼀條, 預設false, 表示刪除多條
5. mongodb的高級查詢
知識點:
- 掌握mongodb的數據查詢操作
- 掌握比較運算符的使用
- 掌握邏輯運算符的使用
- 掌握範圍運算符的使用
- 瞭解正則的使用
- 掌握skip和limit的使用
- 掌握投影方法的使用
- 掌握排序方法的使用
-
瞭解去重方法的使用
5.1 數據查詢
-
⽅法find(): 查詢
db.集合名稱.find({條件⽂檔})
-
⽅法findOne():查詢,只返回第⼀個
db.集合名稱.findOne({條件⽂檔})
-
⽅法pretty(): 將結果格式化
db.集合名稱.find({條件⽂檔}).pretty()
5.2 比較運算符
可以使用以下數據進行練習
{"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true }
{"name" : "⻩蓉", "hometown" : "桃花島", "age" : 18, "gender" : false }
{"name" : "華箏", "hometown" : "蒙古", "age" : 18, "gender" : false }
{"name" : "⻩藥師", "hometown" : "桃花島", "age" : 40, "gender" : true }
{"name" : "段譽", "hometown" : "⼤理", "age" : 16, "gender" : true }
{"name" : "段王爺", "hometown" : "⼤理", "age" : 45, "gender" : true }
{"name" : "洪七公", "hometown" : "華⼭", "age" : 18, "gender" : true }
- 等於: 預設是等於判斷, 沒有運算符
- ⼩於:
$lt (less than)
- ⼩於等於:
$lte (less than equal)
- ⼤於:
$gt (greater than)
- ⼤於等於:
$gte
-
不等於:
$ne
例如:
查詢年齡大於18的所有學生 db.stu.find({age:{$gte:18}})
5.3 邏輯運算符
邏輯運算符主要指與、或邏輯
-
and:在json中寫多個條件即可
查詢年齡⼤於或等於18, 並且性別為true的學⽣ db.stu.find({age:{$gte:18},gender:true})
-
or:使⽤$or, 值為數組, 數組中每個元素為json
查詢年齡⼤於18, 或性別為false的學⽣ db.stu.find({$or:[{age:{$gt:18}},{gender:false}]}) 查詢年齡⼤於18或性別為男⽣, 並且姓名是郭靖 db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
5.4 範圍運算符
使⽤$in
, $nin
判斷數據是否在某個數組內
查詢年齡為18、 28的學⽣
db.stu.find({age:{$in:[18,28,38]}})
5.5 ⽀持正則表達式
使⽤//或$regex編寫正則表達式
查詢sku以abc開頭的數據
db.products.find({sku:/^abc/})
查詢sku以789結尾的數據
db.products.find({sku:{$regex:'789$'}})
{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." }
{ "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" }
{ "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before line" }
{ "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" }
5.6 skip和limit
-
⽅法limit(): ⽤於讀取指定數量的⽂檔
db.集合名稱.find().limit(NUMBER) 查詢2條學⽣信息 db.stu.find().limit(2)
-
⽅法skip(): ⽤於跳過指定數量的⽂檔
db.集合名稱.find().skip(NUMBER) db.stu.find().skip(2)
-
同時使用
db.stu.find().limit(4).skip(5) 或 db.stu.find().skip(5).limit(4)
註意:先使用skip在使用limit的效率要高於前者
5.7 自定義查詢*
由於mongo的shell是一個js的執行環境 使⽤$where後⾯寫⼀個函數, 返回滿⾜條件的數據
查詢年齡⼤於30的學⽣
db.stu.find({
$where:function() {
return this.age>30;}
})
5.8 投影
在查詢到的返回結果中, 只選擇必要的欄位
命令:db.集合名稱.find({},{欄位名稱:1,...})
參數為欄位與值, 值為1表示顯示, 值為0不顯 特別註意: 對於_id列預設是顯示的, 如果不顯示需要明確設置為0
db.stu.find({},{_id:0,name:1,gender:1})
5.9 排序
⽅法sort(), ⽤於對 集進⾏排序
命令:db.集合名稱.find().sort({欄位:1,...})
參數1為升序排列 參數-1為降序排列
根據性別降序, 再根據年齡升序
db.stu.find().sort({gender:-1,age:1})
5.10 統計個數
⽅法count()⽤於統計結果集中⽂檔條數
命令:db.集合名稱.find({條件}).count()
命令:db.集合名稱.count({條件})
db.stu.find({gender:true}).count()
db.stu.count({age:{$gt:20},gender:true})
5.11 消除重覆
⽅法distinct()
對數據進⾏去重
命令:db.集合名稱.distinct('去重欄位',{條件})
db.stu.distinct('hometown',{age:{$gt:18}})