7-3 MongoDB 基本操作

創(chuàng)建數(shù)據(jù)庫

# 語法
# 有就切換 沒有就創(chuàng)建
use DATABASE_NAME

打印數(shù)據(jù)庫列表

show dbs

** MongoDB 中默認(rèn)的數(shù)據(jù)庫為 test亚情,如果你沒有創(chuàng)建新的數(shù)據(jù)庫圈浇,集合將存放在 test 數(shù)據(jù)庫中粪牲。**

刪除數(shù)據(jù)庫

# 先切換到 要刪除的數(shù)據(jù)庫下
use  test_chen

# 在刪除數(shù)據(jù)庫
db.dropDatabase()

<br />


<br />

打印集合列表

show collections

創(chuàng)建集合

** db.createCollection(name, options) **

在命令中, name 是要創(chuàng)建的集合的名稱. Options 是一個文件猎拨,用于指定配置的集合

參數(shù) 類型 描述
Name String 要創(chuàng)建的集合名稱
Options Document (可選)指定有關(guān)內(nèi)存大小和索引選項

選項??參數(shù)是可選的搁凸,所以只需要到指定的集合名稱葱轩。以下是可以使用的選項列表:

字段 類型 描述
capped Boolean (可選)如果為true睦焕,則啟用封頂集合。封頂集合是固定大小的集合靴拱,會自動覆蓋最早的條目垃喊,當(dāng)它達(dá)到其最大大小。如果指定true袜炕,則需要也指定尺寸參數(shù)本谜。
autoIndexID Boolean (可選)如果為true,自動創(chuàng)建索引_id字段的默認(rèn)值是false妇蛀。
size number (可選)指定最大大小字節(jié)封頂集合耕突。如果封頂如果是 true,那么你還需要指定這個字段评架。
max number (可選)指定封頂集合允許在文件的最大數(shù)量眷茁。

當(dāng)插入文檔,MongoDB 第一檢查大小字段封頂集合纵诞,然后它會檢查最大的字段中上祈。

# 切換數(shù)據(jù)庫 
use test_chen

# 創(chuàng)建集合(不帶參數(shù))
db.createCollection("mycollection")

# 創(chuàng)建集合(帶參數(shù))
db.createCollection("mycol", { capped : true, autoIndexID : true, size : 6142800, max : 10000 } )


# 插入數(shù)據(jù)的時候 如果不存在改集合 會自動創(chuàng)建 集合
db.yiibai.insert({"name" : "yiibai"})
如果 yiibai 集合不存在 則自動創(chuàng)建

刪除集合

# 語法
db.COLLECTION_NAME.drop()

# 刪除 名為yiibai的集合
db.yiibai.drop()

<br />


<br />

數(shù)據(jù)類型

    String : 這是最常用的數(shù)據(jù)類型來存儲數(shù)據(jù)。在MongoDB中的字符串必須是有效的UTF-8。

    Integer : 這種類型是用來存儲一個數(shù)值登刺。整數(shù)可以是32位或64位籽腕,這取決于您的服務(wù)器。

    Boolean : 此類型用于存儲一個布爾值 (true/ false) 纸俭。

    Double : 這種類型是用來存儲浮點值皇耗。

    Min/ Max keys : 這種類型被用來對BSON元素的最低和最高值比較揍很。

    Arrays : 使用此類型的數(shù)組或列表或多個值存儲到一個鍵郎楼。

    Timestamp : 時間戳。這可以方便記錄時的文件已被修改或添加窒悔。

    Object : 此數(shù)據(jù)類型用于嵌入式的文件呜袁。

    Null : 這種類型是用來存儲一個Null值。

    Symbol : 此數(shù)據(jù)類型用于字符串相同简珠,但它通常是保留給特定符號類型的語言使用阶界。

    Date : 此數(shù)據(jù)類型用于存儲當(dāng)前日期或時間的UNIX時間格式×郑可以指定自己的日期和時間膘融,日期和年,月珍策,日到創(chuàng)建對象托启。

    Object ID : 此數(shù)據(jù)類型用于存儲文檔的ID宅倒。

    Binary data : 此數(shù)據(jù)類型用于存儲二進(jìn)制數(shù)據(jù)攘宙。

    Code : 此數(shù)據(jù)類型用于存儲到文檔中的JavaScript代碼。

    Regular expression : 此數(shù)據(jù)類型用于存儲正則表達(dá)式

<br />


<br />

查詢文檔

find() 方法

# 語法
db.COLLECTION_NAME.find()

# 例子
db.test_chen.find()


find() 方法將在非結(jié)構(gòu)化的方式顯示所有的文件拐迁。

pretty() 方法

結(jié)果顯示在一個格式化的方式蹭劈,可以使用 pretty() 方法.

# 語法
db.mycol.find().pretty()


#例子
db.mycol.find().pretty()

# 輸出
{
       "_id": ObjectId(7df78ad8902c), 
       "title": "MongoDB Overview",
       "description": "MongoDB is no sql database", 
       "by": "tutorials yiibai",
       "url": "http://www.yiibai.com",
       "tags": ["mongodb", "database", "NoSQL"], 
       "likes": "100"
}

除了 find() 方法之外,還有一個 findOne() 方法线召,它只返回一個文檔铺韧。

RDBMS Where子句和MongoDB等同語句

|操作 | 語法| 例子| RDBMS 等同|
|:-----:|:-----:|:-----:|
|Equality| {<key>:<value>} |db.mycol.find({"by":"tutorials yiibai"}).pretty() |where by = 'tutorials yiibai'|
|Less Than |{<key>:{$lt:<value>}} |db.mycol.find({"likes":{$lt:50}}).pretty() |where likes < 50|
|Less Than Equals |{<key>:{$lte:<value>}}| db.mycol.find({"likes":{$lte:50}}).pretty() |where likes <= 50|
|Greater Than |{<key>:{$gt:<value>}} |db.mycol.find({"likes":{$gt:50}}).pretty() |where likes > 50|
|Greater Than Equals | {<key>:{$gte:<value>}} | db.mycol.find({"likes":{$gte:50}}).pretty() |where likes >= 50|
|Not Equals |{<key>:{$ne:<value>}} | db.mycol.find({"likes":{$ne:50}}).pretty() |where likes != 50|

AND 在MongoDB中用法

在 find() 方法,如果通過多個鍵分離','缓淹,那么 MongoDB 處理 AND 條件哈打。AND 基本語法如下所示:

# 語法
db.mycol.find({key1:value1, key2:value2}).pretty()

# 例子
# 下面給出的例子將顯示所有的教程,標(biāo)題是“MongoDB Overview“

db.mycol.find({"by":"tutorials yiibai","title": "MongoDB Overview"}).pretty()

# 對于上面給出的例子相當(dāng)于where子句 ' where by='yiibai' AND title='MongoDB Overview' 讯壶, 可以通過任意數(shù)量的鍵值對在 find 子句料仗。

MongoDB中OR

OR條件的基礎(chǔ)上要查詢文件,需要使用$or關(guān)鍵字伏蚊。OR 基本語法如下所示:


# 語法
db.mycol.find( 
      { 
           $or: [ 
                   {key1: value1}, 
                   {key2:value2} 
                   ] 
      }
).pretty()

# 例子
db.mycol.find({
     $or:[
             {"by":"yiibai"},
             {"title": "MongoDB Overview"}
         ]
}).pretty()

AND 和 OR 一起使用

下面給出的例子將顯示有像的文件大于100立轧,其標(biāo)題是“MongoDB Overview'或者是'yiibai' 。
等效于 SQL where子句 為 'where likes>10 AND (by = 'yiibai' OR title = 'MongoDB Overview')'

db.mycol.find({
              "likes": {$gt:10}, 
              $or: [
                     {"by": "yiibai"},
                     {"title": "MongoDB Overview"}
                     ]
}).pretty()

<br />


<br />

插入文檔

要插入數(shù)據(jù)到 MongoDB 集合,需要使用 MongoDB 的 insert()save() 方法氛改。

insert() 方法

# 語法
db.COLLECTION_NAME.insert(document)


# 例子
db.test_one.insert({
   title: 'test', 
   description: 'testestest',
   by: 'chenxiaomo',
   url: 'http://www.baidu.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
})


# 插入多條
db.post.insert([
{
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by: 'tutorials yiibai',
   url: 'http://www.yiibai.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   title: 'NoSQL Database', 
   description: 'NoSQL database doesn't have tables',
   by: 'tutorials yiibai',
   url: 'http://www.yiibai.com',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 20, 
   comments: [  
      {
         user:'user1',
         message: 'My first comment',
         dateCreated: new Date(2013,11,10,2,35),
         like: 0 
      }
   ]
}
])


# save 方法同上

<br />


<br />

更新文檔

MongoDB的 update()save() 方法用于更新文檔的集合帐萎。
update()方法更新現(xiàn)有的文檔值,而替換現(xiàn)有的文檔通過的文件中 save() 方法胜卤。

update()方法

更新符合條件的文檔

# 語法
db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

參數(shù)說明:

  • **query **: update的查詢條件疆导,類似sql update查詢內(nèi)where后面的。
  • **update **: update的對象和一些更新的操作符(如$,$inc...)等葛躏,也可以理解為sql update查詢內(nèi)set后面的
  • **upsert ** : 可選是鬼,這個參數(shù)的意思是,如果不存在update的記錄紫新,是否插入objNew,true為插入均蜜,默認(rèn)是false,不插入芒率。
  • **multi ** : 可選囤耳,mongodb 默認(rèn)是false,只更新找到的第一條記錄,如果這個參數(shù)為true,就把按條件查出來多條記錄全部更新偶芍。
  • **writeConcern ** :可選充择,拋出異常的級別。

Save() 方法

替換符合條件的文檔

# 語法
db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)

# 例子
db.mycol.save(
   {
      "_id" : ObjectId(5983548781331adf45ec7), 
      "title":"Yiibai New Topic", 
      "by":"Yiibai"
   }
)

更多實例


# 只更新第一條記錄:
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );

# 全部更新:
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );

# 只添加第一條:
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );

# 全部添加加進(jìn)去:
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );

# 全部更新:
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );

# 只更新第一條記錄:
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

<br />


<br />

刪除文檔

remove() 方法

# 語法
db.collection.remove(
   <query>,
   <justOne>
)

# 2.6 后的語法
db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

參數(shù)說明:

  • **query **:(可選)刪除的文檔的條件匪蟀。
  • **justOne **: (可選)如果設(shè)為 true 或 1椎麦,則只刪除一個文檔。
  • **writeConcern ** :(可選)拋出異常的級別材彪。
# 刪除指定條件的
db.col.remove({'title':'MongoDB 教程'})

# 刪除指定條件的  并且 指定刪除條數(shù)
db.col.remove({'title':'MongoDB 教程'},  2)

#  刪除全部的
db.col.remove({})



<br />


<br />

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末观挎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子段化,更是在濱河造成了極大的恐慌嘁捷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件显熏,死亡現(xiàn)場離奇詭異雄嚣,居然都是意外死亡,警方通過查閱死者的電腦和手機喘蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門缓升,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蕴轨,你說我怎么就攤上這事港谊。” “怎么了尺棋?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵封锉,是天一觀的道長绵跷。 經(jīng)常有香客問我,道長成福,這世上最難降的妖魔是什么碾局? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮奴艾,結(jié)果婚禮上净当,老公的妹妹穿的比我還像新娘。我一直安慰自己蕴潦,他們只是感情好像啼,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著潭苞,像睡著了一般忽冻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上此疹,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天僧诚,我揣著相機與錄音,去河邊找鬼蝗碎。 笑死湖笨,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹦骑。 我是一名探鬼主播慈省,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼眠菇!你這毒婦竟也來了边败?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤琼锋,失蹤者是張志新(化名)和其女友劉穎放闺,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缕坎,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年篡悟,在試婚紗的時候發(fā)現(xiàn)自己被綠了谜叹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡搬葬,死狀恐怖荷腊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情急凰,我是刑警寧澤女仰,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響疾忍,放射性物質(zhì)發(fā)生泄漏乔外。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一一罩、第九天 我趴在偏房一處隱蔽的房頂上張望杨幼。 院中可真熱鬧,春花似錦聂渊、人聲如沸差购。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欲逃。三九已至,卻和暖如春饼暑,著一層夾襖步出監(jiān)牢的瞬間暖夭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工撵孤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留迈着,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓邪码,卻偏偏與公主長得像裕菠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子闭专,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容