數據庫的基本操作
use db_name
創(chuàng)建數據庫
db
查看當前連接的數據庫
show dbs
顯示所有數據庫,不顯示空數據庫
db.dropDatabase()
刪除當前數據庫
集合的基本操作
show collections
顯示所有集合
db.collection_name.drop()
刪除集合
db.createCollection(name,args)
創(chuàng)建集合并使用args作為初始文檔
db.GPA.insert([
... {
... name:"王威龍",
... email:"wangweilong1996@gmail.com"
... }])
向集合GPA中插入數據
db.GPA.save([ { name:"王威龍1",
email:"wangweilong1996@gmail.com" }])
插入數據中,如果GPA集合不存在會自動創(chuàng)建
doc=({key:value,key:[{key:value,key:value}]})
db.collection_name.insert(doc)
插入預定義文檔
數據查詢
db.GPA.find({"name":"王威龍"}).pretty()
輸出集合中符合參數的數據
db.collection_name.find()
不帶參數返回集合中所有數據
db.collection_name.find().pretty()
使輸出結果更美觀
db.collection_name.find({key1:value1,key2:value2})
當參數中有多個鍵值對即視為AND查詢操作
db.collection_name.find( { $or: [ {key1:value1} , {key2:value2} ] })
OR查詢操作
db.collection_name.find({key1:value1, $or: [ {key2:value2},{key3:value3} ] })
OR AND 聯立查詢
key: {$gt:10}
key對應的value 大于 10
數據修改
db.collection_name.update({{key:value},{$set: {key1:value1}}},options)
更新鍵值對,option可為{multi:true},修改集合中的所有文檔
db.collection_name.save({_id:Objectid,new_data})
替換已存在的文檔
db.collection_name.remove({key_value})
刪除符合條件的數據
條件操作符
$gt:1
大于1
| 值 | 說明 |
|---|---|
| $gt | 大于 |
| $lt | 小于 |
| $lte | 小于等于 |
| $gte | 大于等于 |
| $ne | 不等于 |
$type
* 雙精度型-1
* 字符串-2
* 對象-3
* 數組-4
* 二進制數據-5
* 對象ID-7
* 布爾類型-8
* 數據-9
* 空-10
* 正則表達式-11
* JS代碼-13
* 符號-14
* 有作用域的JS代碼-15
* 32位整型數-16
* 時間戳-17
* 64位整型數-18
* Min key-255
* Max key-127
限制語句
db.collection_name.find().limit(n)
只讀取查找到的前n個記錄
db.collection_name.find().skip(n)
忽略讀取到的前n條
db.collection_name.find().sort({key:1|-1})
對結果排序,1表示升序排列,-1代表降序排列
索引-ensureIndex()
db.collection_name.ensureIndex({key:value},options)
建立索引,option參數如下
| 參數 | 類型 | 描述 |
|---|---|---|
| background | Boolean | 建立索引要不要阻塞其他數據庫操作,默認為false |
| unique | Boolean | 建立的索引是否唯一,默認false |
| name | string | 索引的名稱,若未指定,系統(tǒng)自動生成 |
| dropDups | Boolean | 建立唯一索引時,是否刪除重復記錄,默認flase |
| sparse | Boolean | 對文檔不存在的字段數據不啟用索引,默認false |
| expireAfterSeconds | integer | 設置集合的生存時間,單位為秒 |
| v | index version | 索引的版本號 |
| weights | document | 索引權重值,范圍為1到99999 |
| default-language | string | 默認為英語 |
| language_override | string | 默認值為 language |
聚合
db.collection_name.aggregate({options})
options參數如下
* $match:查詢,跟find一樣;
* $limit:限制顯示結果數量;
* $skip:忽略結果數量;
* $sort:排序;
* $group:按照給定表達式組合結果。
聚合表達式
| 名稱 | 描述 |
|---|---|
| $sum | 計算總和 |
| $avg | 計算平均值 |
| $min和$max | 計算最小和最大值 |
| $push | 在結果文檔中插入值到一個數組 |
| $addToSet | 在結果文檔中插入值到一個數組,但不創(chuàng)建副本 |
| $first | 根據資源文檔的排序獲取第一個文檔數據 |
| $last | 根據資源文檔的排序獲取最后一個文檔數據 |
管道
$project:修改輸入文檔的結構??梢杂脕碇孛?、增加或刪除域,也可以用于創(chuàng)建計算結果以及嵌套文檔。
\$match:用于過濾數據,只輸出符合條件的文檔。$match使用MongoDB的標準查詢操作。
$limit:用來限制MongoDB聚合管道返回的文檔數。
$skip:在聚合管道中跳過指定數量的文檔,并返回余下的文檔。
$unwind:將文檔中的某一個數組類型字段拆分成多條,每條包含數組中的一個值。
$group:將集合中的文檔分組,可用于統(tǒng)計結果。
$sort:將輸入文檔排序后輸出。
$geoNear:輸出接近某一地理位置的有序文檔。
原子操作
{$set:{field:value}}
指定一個鍵并更新鍵值,若不存在就創(chuàng)建
{$unset:{field:true}}
刪除一個鍵
{$inc :{field:value}}
對文檔的某個值為數字型的鍵進行增減操作
{$push:{field:value}}
把value追加到field,field一定是數組類型,如果field不存在,新增一個
{$pushAll:{field:value_array}}
同上,一次多值
{$pull:{field:value}}
從數組field中刪除一個等于value的值
{$addToSet:{field:value}}
增加value到數組中
{$pop:{field:1}}
刪除數組中的第一個或最后一個元素
{$rename:{old_name:new_name}}
修改字段名稱
{$bit:{field:{and:5}}}
位操作
查詢分析
explain()
提供查詢信息使用索引和查詢統(tǒng)計
結果中字段解釋:
- indexOnly:為 true ,表示我們使用了索引;
- cursor:因為這個查詢使用了索引,MongoDB中索引存儲在B樹結構中,所以這是也使用了BtreeCursor類型的游標。如果沒有使用索引,游標的類型是BasicCursor。這個鍵還會給出你所使用的索引的名稱,你通過這個名稱可以查看當前數據庫下的system.indexes集合(系統(tǒng)自動創(chuàng)建)來得到索引的詳細信息;
- n:當前查詢返回的文檔數量;
- nscanned/nscannedObjects:表明當前這次查詢一共掃描了集合中多少個文檔,我們的目的是,讓這個數值和返回文檔的數量越接近越好;
- millis:當前查詢所需時間,毫秒數;
- indexBounds:當前查詢具體使用的索引。
hint()
強迫mongoDB使用一個指定的索引