數(shù)據(jù)庫的基本操作
use db_name
創(chuàng)建數(shù)據(jù)庫
db
查看當前連接的數(shù)據(jù)庫
show dbs
顯示所有數(shù)據(jù)庫它褪,不顯示空數(shù)據(jù)庫
db.dropDatabase()
刪除當前數(shù)據(jù)庫
集合的基本操作
show collections
顯示所有集合
db.collection_name.drop()
刪除集合
db.createCollection(name,args)
創(chuàng)建集合并使用args作為初始文檔
db.GPA.insert([
... {
... name:"王威龍",
... email:"wangweilong1996@gmail.com"
... }])
向集合GPA中插入數(shù)據(jù)
db.GPA.save([ { name:"王威龍1",
email:"wangweilong1996@gmail.com" }])
插入數(shù)據(jù)中,如果GPA集合不存在會自動創(chuàng)建
doc=({key:value,key:[{key:value,key:value}]})
db.collection_name.insert(doc)
插入預定義文檔
數(shù)據(jù)查詢
db.GPA.find({"name":"王威龍"}).pretty()
輸出集合中符合參數(shù)的數(shù)據(jù)
db.collection_name.find()
不帶參數(shù)返回集合中所有數(shù)據(jù)
db.collection_name.find().pretty()
使輸出結果更美觀
db.collection_name.find({key1:value1,key2:value2})
當參數(shù)中有多個鍵值對即視為AND查詢操作
db.collection_name.find( { $or: [ {key1:value1} , {key2:value2} ] })
OR查詢操作
db.collection_name.find({key1:value1, $or: [ {key2:value2},{key3:value3} ] })
OR AND 聯(lián)立查詢
key: {$gt:10}
key對應的value 大于 10
數(shù)據(jù)修改
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})
刪除符合條件的數(shù)據(jù)
條件操作符
$gt:1
大于1
值 | 說明 |
---|---|
$gt | 大于 |
$lt | 小于 |
$lte | 小于等于 |
$gte | 大于等于 |
$ne | 不等于 |
$type
* 雙精度型-1
* 字符串-2
* 對象-3
* 數(shù)組-4
* 二進制數(shù)據(jù)-5
* 對象ID-7
* 布爾類型-8
* 數(shù)據(jù)-9
* 空-10
* 正則表達式-11
* JS代碼-13
* 符號-14
* 有作用域的JS代碼-15
* 32位整型數(shù)-16
* 時間戳-17
* 64位整型數(shù)-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參數(shù)如下
參數(shù) | 類型 | 描述 |
---|---|---|
background | Boolean | 建立索引要不要阻塞其他數(shù)據(jù)庫操作居触,默認為false |
unique | Boolean | 建立的索引是否唯一,默認false |
name | string | 索引的名稱老赤,若未指定轮洋,系統(tǒng)自動生成 |
dropDups | Boolean | 建立唯一索引時,是否刪除重復記錄抬旺,默認flase |
sparse | Boolean | 對文檔不存在的字段數(shù)據(jù)不啟用索引砖瞧,默認false |
expireAfterSeconds | integer | 設置集合的生存時間,單位為秒 |
v | index version | 索引的版本號 |
weights | document | 索引權重值,范圍為1到99999 |
default-language | string | 默認為英語 |
language_override | string | 默認值為 language |
聚合
db.collection_name.aggregate({options})
options參數(shù)如下
* $match:查詢织盼,跟find一樣驻子;
* $limit:限制顯示結果數(shù)量;
* $skip:忽略結果數(shù)量风响;
* $sort:排序;
* $group:按照給定表達式組合結果。
聚合表達式
名稱 | 描述 |
---|---|
$sum | 計算總和 |
$avg | 計算平均值 |
$min和$max | 計算最小和最大值 |
$push | 在結果文檔中插入值到一個數(shù)組 |
$addToSet | 在結果文檔中插入值到一個數(shù)組薇搁,但不創(chuàng)建副本 |
$first | 根據(jù)資源文檔的排序獲取第一個文檔數(shù)據(jù) |
$last | 根據(jù)資源文檔的排序獲取最后一個文檔數(shù)據(jù) |
管道
$project:修改輸入文檔的結構《砂耍可以用來重命名啃洋、增加或刪除域,也可以用于創(chuàng)建計算結果以及嵌套文檔屎鳍。
\$match:用于過濾數(shù)據(jù)宏娄,只輸出符合條件的文檔。$match使用MongoDB的標準查詢操作逮壁。
$limit:用來限制MongoDB聚合管道返回的文檔數(shù)孵坚。
$skip:在聚合管道中跳過指定數(shù)量的文檔,并返回余下的文檔。
$unwind:將文檔中的某一個數(shù)組類型字段拆分成多條卖宠,每條包含數(shù)組中的一個值巍杈。
$group:將集合中的文檔分組,可用于統(tǒng)計結果扛伍。
$sort:將輸入文檔排序后輸出筷畦。
$geoNear:輸出接近某一地理位置的有序文檔。
原子操作
{$set:{field:value}}
指定一個鍵并更新鍵值刺洒,若不存在就創(chuàng)建
{$unset:{field:true}}
刪除一個鍵
{$inc :{field:value}}
對文檔的某個值為數(shù)字型的鍵進行增減操作
{$push:{field:value}}
把value追加到field,field一定是數(shù)組類型鳖宾,如果field不存在,新增一個
{$pushAll:{field:value_array}}
同上作媚,一次多值
{$pull:{field:value}}
從數(shù)組field中刪除一個等于value的值
{$addToSet:{field:value}}
增加value到數(shù)組中
{$pop:{field:1}}
刪除數(shù)組中的第一個或最后一個元素
{$rename:{old_name:new_name}}
修改字段名稱
{$bit:{field:{and:5}}}
位操作
查詢分析
explain()
提供查詢信息使用索引和查詢統(tǒng)計
結果中字段解釋:
- indexOnly:為 true 攘滩,表示我們使用了索引;
- cursor:因為這個查詢使用了索引纸泡,MongoDB中索引存儲在B樹結構中漂问,所以這是也使用了BtreeCursor類型的游標。如果沒有使用索引女揭,游標的類型是BasicCursor蚤假。這個鍵還會給出你所使用的索引的名稱,你通過這個名稱可以查看當前數(shù)據(jù)庫下的system.indexes集合(系統(tǒng)自動創(chuàng)建)來得到索引的詳細信息吧兔;
- n:當前查詢返回的文檔數(shù)量磷仰;
- nscanned/nscannedObjects:表明當前這次查詢一共掃描了集合中多少個文檔,我們的目的是境蔼,讓這個數(shù)值和返回文檔的數(shù)量越接近越好灶平;
- millis:當前查詢所需時間,毫秒數(shù)箍土;
- indexBounds:當前查詢具體使用的索引逢享。
hint()
強迫mongoDB使用一個指定的索引