MongoDB常用操作

數(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使用一個指定的索引

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吴藻,隨后出現(xiàn)的幾起案子瞒爬,更是在濱河造成了極大的恐慌,老刑警劉巖沟堡,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侧但,死亡現(xiàn)場離奇詭異,居然都是意外死亡航罗,警方通過查閱死者的電腦和手機禀横,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來伤哺,“玉大人燕侠,你說我怎么就攤上這事者祖。” “怎么了绢彤?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵七问,是天一觀的道長。 經(jīng)常有香客問我茫舶,道長械巡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任饶氏,我火速辦了婚禮讥耗,結果婚禮上,老公的妹妹穿的比我還像新娘疹启。我一直安慰自己古程,他們只是感情好,可當我...
    茶點故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布喊崖。 她就那樣靜靜地躺著挣磨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪荤懂。 梳的紋絲不亂的頭發(fā)上茁裙,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機與錄音节仿,去河邊找鬼晤锥。 笑死,一個胖子當著我的面吹牛廊宪,可吹牛的內容都是我干的矾瘾。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼箭启,長吁一口氣:“原來是場噩夢啊……” “哼霜威!你這毒婦竟也來了?” 一聲冷哼從身側響起册烈,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎婿禽,沒想到半個月后赏僧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡扭倾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年淀零,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膛壹。...
    茶點故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡驾中,死狀恐怖唉堪,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情肩民,我是刑警寧澤唠亚,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站持痰,受9級特大地震影響灶搜,放射性物質發(fā)生泄漏。R本人自食惡果不足惜工窍,卻給世界環(huán)境...
    茶點故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一割卖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧患雏,春花似錦鹏溯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至攻人,卻和暖如春取试,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背怀吻。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工瞬浓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蓬坡。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓猿棉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親屑咳。 傳聞我的和親對象是個殘疾皇子萨赁,可洞房花燭夜當晚...
    茶點故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內容