MongoDB 基礎知識

簡介

MongoDB 是非關系型數據庫瞳步。支持的數據結構非常松散,是類似 json 的 bson 格式嘀倒,因此可以存儲比較復雜的數據類型灌危。采用面向集合的存儲勇蝙,在 MongoDB 中,一個數據庫包含多個集合翁锡,類似于 MySQL 中一個數據庫包含多個表馆衔;一個集合包含多個文檔角溃,類似于 MySQL 中一個表包含多條數據。

數據庫的創(chuàng)建和刪除

使用 use 命令可以連接到指定的數據庫或者創(chuàng)建數據庫(不存在時):
> use mydb

查看當前連接的數據庫:
> db

查看所有的數據庫:
> show dbs

列出的所有數據庫中看不到 mydb 或者顯示 mydb(empty) 邪财,因為 mydb 為空,里面沒有任何東西怎憋,MongoDB 不顯示或顯示 mydb(empty)绊袋。

使用 db.dropDatabase() 刪除數據庫:

> use local 
switched to db local
> db.dropDatabase()
集合(collection)的創(chuàng)建和刪除

在數據庫 mydb 中創(chuàng)建一個集合

> use mydb
switched to db mydb
> db.createCollection("users")

查看創(chuàng)建的集合:
> show collections
或者
> show tables

刪除集合(刪除 users 集合):
> db.users.drop()

向集合中插入文檔

使用 insert() 插入數據時,如果 users 集合沒有創(chuàng)建會自動創(chuàng)建躁垛。

> use mydb
switched to db mydb
> db.users.insert([{name: 'tom', email: 'tom@qq.com'}, {name: 'jack', email: 'jack@qq.com'}])
查詢文檔
> db.post.insert([{
...     title: 'MongoDB Overview',
...     description: 'MongoDB is no sql database',
...     by: 'tom',
...     url: 'http://www.zhihu.com',
...     tags: ['mongodb', 'database', 'NoSQL'],
...     likes: 100
... }, {
...     title: 'NoSQL Database',
...     description: "NoSQL database doesn't have tables",
...     by: 'jack',
...     url: 'http://www.zhihu.com',
...     tags: ['mongodb', 'database', 'NoSQL'],
...     likes: 20,
...     comments: [{
...         user: 'user1',
...         message: 'My first comment',
...         dateCreated: new Date(2013, 11, 10, 2, 35),
...         like: 0
...     }]
... }])
> db.post.find()
{ "_id" : ObjectId("57dfad717c8486a21f40f529"), "title" : "MongoDB Overview", "d
escription" : "MongoDB is no sql database", "by" : "tom", "url" : "http://www.zh
ihu.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }
{ "_id" : ObjectId("57dfad717c8486a21f40f52a"), "title" : "NoSQL Database", "des
cription" : "NoSQL database doesn't have tables", "by" : "jack", "url" : "http:/
/www.zhihu.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 20, "com
ments" : [ { "user" : "user1", "message" : "My first comment", "dateCreated" : I
SODate("2013-12-09T18:35:00Z"), "like" : 0 } ] }
> db.post.find().pretty()
{
        "_id" : ObjectId("57dfad717c8486a21f40f529"),
        "title" : "MongoDB Overview",
        "description" : "MongoDB is no sql database",
        "by" : "tom",
        "url" : "http://www.zhihu.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
{
        "_id" : ObjectId("57dfad717c8486a21f40f52a"),
        "title" : "NoSQL Database",
        "description" : "NoSQL database doesn't have tables",
        "by" : "jack",
        "url" : "http://www.zhihu.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 20,
        "comments" : [
                {
                        "user" : "user1",
                        "message" : "My first comment",
                        "dateCreated" : ISODate("2013-12-09T18:35:00Z"),
                        "like" : 0
                }
        ]
}

說明:
使用 find() 語句查詢數據土铺,不加任何參數默認返回所有數據記錄。
pretty() 可以使查詢輸出的結果更美觀镀迂。

查詢結果排序

語法:
db.COLLECTION_NAME.find().sort({KEY: 1|-1})
升序用 1 表示探遵,降序用 -1 表示

更新文檔

基本語法:
> db.COLLECTION_NAME.update(criteria, objNew, upsert, multi)
參數說明:
criteria:查詢條件
objNew:update 對象和一些更新操作符
upsert:如果不存在查詢的記錄,是否插入 objNew 這個新的文檔藏雏,true 為插入掘殴,默認為 false奏寨,不插入病瞳。
multi:默認是 false,只更新找到的第一條記錄笼踩。如果為 true嚎于,把按條件查詢出來的記錄全部更新于购。

注意:
在使用參數 multi 時,multi update only works with $ operators嫌吠。也就是說辫诅,參數 multi 是和 $set 一起使用的。

> db.users.find()
{ "_id" : ObjectId("57dfaaf47c8486a21f40f526"), "name" : "tom", "email" : "tom@q
q.com" }
{ "_id" : ObjectId("57dfaaf47c8486a21f40f527"), "name" : "jack", "email" : "jack
@qq.com" }
> db.users.update({name: 'tom'}, {name: 'jerry'})
> db.users.find()
{ "_id" : ObjectId("57dfaaf47c8486a21f40f526"), "name" : "jerry" }
{ "_id" : ObjectId("57dfaaf47c8486a21f40f527"), "name" : "jack", "email" : "jack
@qq.com" }
> db.users.update({name: 'jack'}, {$set: {name: 'jerry'}})
> db.users.find()
{ "_id" : ObjectId("57dfaaf47c8486a21f40f526"), "name" : "jerry" }
{ "_id" : ObjectId("57dfaaf47c8486a21f40f527"), "name" : "jerry", "email" : "jac
k@qq.com" }
> db.users.update({name: 'jerry'}, {$set:{name: 'fuck'}}, false, true)
> db.users.find()
{ "_id" : ObjectId("57dfaaf47c8486a21f40f526"), "name" : "fuck" }
{ "_id" : ObjectId("57dfaaf47c8486a21f40f527"), "name" : "fuck", "email" : "jack
@qq.com" }

補充:
$set
用法:{$set: {field: value}}
作用:把文檔中某個字段 field 的值設為 value

刪除文檔

基本語法:
> db.COLLECTION_NAME.remove(criteria, justOne)
參數說明:
criteria:查詢條件(可選)
justOne:(可選)如果設置為 true 或 1,只取出一個文檔

注意:
如果沒有指定刪除條件涉枫,則 MongoDB 將從集合中刪除整個文件

> db.users.remove({})
MongoDB 中的 AND

find() 中傳入多個鍵值對時困后,MongoDB 就會將其作為 AND 查詢處理。用法:

> db.post.find(
    { 
        key1: value1, 
        key2: value2 
    }
).pretty()
> db.post.find({"by":"tom","title": "MongoDB Overview"}).pretty()
{
        "_id" : ObjectId("57dfad717c8486a21f40f529"),
        "title" : "MongoDB Overview",
        "description" : "MongoDB is no sql database",
        "by" : "tom",
        "url" : "http://www.zhihu.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
MongoDB 中的 OR

MongoDB 中趾盐,OR 查詢語句以 $or 作為關鍵詞,用法如下:

> db.post.find(
   {
      $or: [
        {key1: value1}, 
        {key2:value2}
      ]
   }
).pretty()
> db.post.find({$or: [{by: "tom"}, {title: "NoSQL Database"}]}).pretty()
{
        "_id" : ObjectId("57dfad717c8486a21f40f529"),
        "title" : "MongoDB Overview",
        "description" : "MongoDB is no sql database",
        "by" : "tom",
        "url" : "http://www.zhihu.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 100
}
{
        "_id" : ObjectId("57dfad717c8486a21f40f52a"),
        "title" : "NoSQL Database",
        "description" : "NoSQL database doesn't have tables",
        "by" : "jack",
        "url" : "http://www.zhihu.com",
        "tags" : [
                "mongodb",
                "database",
                "NoSQL"
        ],
        "likes" : 20,
        "comments" : [
                {
                        "user" : "user1",
                        "message" : "My first comment",
                        "dateCreated" : ISODate("2013-12-09T18:35:00Z"),
                        "like" : 0
                }
        ]
}
同時使用 AND 和 OR
> db.post.find({
    likes: {$gt: 20},
    $or: [
        {by: "tom"},
        {title: "NoSQL Database"}
    ]
}).pretty()

條件操作符說明:
$gt 表示大于
$lt 表示小于
$lte 表示小于等于
$gte 表示大于等于
$ne 表示不等于

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末丹锹,一起剝皮案震驚了整個濱河市匾灶,隨后出現(xiàn)的幾起案子阶女,更是在濱河造成了極大的恐慌,老刑警劉巖业筏,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異妖啥,居然都是意外死亡荆虱,警方通過查閱死者的電腦和手機怀读,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門叁丧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蚊锹,“玉大人牡昆,你說我怎么就攤上這事柱宦〗莘校” “怎么了说墨?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長楼咳。 經常有香客問我母怜,道長,這世上最難降的妖魔是什么轨域? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮枉长,結果婚禮上,老公的妹妹穿的比我還像新娘自点。我一直安慰自己桂敛,他們只是感情好薪伏,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布塘淑。 她就那樣靜靜地躺著存捺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肖油。 梳的紋絲不亂的頭發(fā)上蹈垢,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天派任,我揣著相機與錄音坪哄,去河邊找鬼扩劝。 笑死姻氨,一個胖子當著我的面吹牛衡奥,可吹牛的內容都是我干的描融。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼揍移,長吁一口氣:“原來是場噩夢啊……” “哼畅形!你這毒婦竟也來了竖席?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體利花,經...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年刁俭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖羽历,靈堂內的尸體忽然破棺而出涂圆,到底是詐尸還是另有隱情踩衩,我是刑警寧澤线脚,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響掸鹅,放射性物質發(fā)生泄漏。R本人自食惡果不足惜牍疏,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望履植。 院中可真熱鬧鼻种,春花似錦敷鸦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蜜笤。三九已至翁授,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背撞羽。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留上煤,地道東北人凫佛。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓趾疚,卻偏偏與公主長得像焚廊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嗓蘑,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內容

  • 這里是閱讀了《MongoDB權威指南》后做的相關筆記空猜。 一辈毯、文檔 文檔是MongoDB的核心概念坝疼。文檔就是鍵值對的...
    yjaal閱讀 652評論 0 4
  • 安裝mongodb 創(chuàng)建mongodb文件目錄 啟動、停止谆沃、重啟 進入mongoDB客戶端 建議使用robomon...
    FangHao閱讀 395評論 0 1
  • 安裝 MongoDB Windowns钝凶、Ubuntu17.10 下安裝 MongoDB教程在此 MongoDB 幫...
    Kangvcar閱讀 2,103評論 0 13
  • NoSql數據庫優(yōu)缺點 在優(yōu)勢方面主要體現(xiàn)在下面幾點: 簡單的擴展 快速的讀寫 低廉的成本 靈活的數據模型 在不足...
    dreamer_lk閱讀 2,740評論 0 6
  • 談理想太遠,不如談談自己喜歡什么唁影。 最近的話耕陷,想滑雪掂名,想治好脾胃,想拿錢哟沫,想和好朋友吃頓熱乎乎的火鍋饺蔑。 再遠一點,...
    XTJ閱讀 145評論 0 0