2020-03-18

MongoDB數(shù)據(jù)庫(kù)

簡(jiǎn)介:

MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的 NoSQL 數(shù)據(jù)庫(kù)走孽。在處理海量數(shù)據(jù)的時(shí)候會(huì)比 MySQL 更有優(yōu)
勢(shì)。爬蟲如果上了一個(gè)量級(jí),可能就會(huì)比較推薦使用 MongoDB 够话,當(dāng)然沒有上量的數(shù)據(jù)也完全可以
使用 MongoDB 來存儲(chǔ)數(shù)據(jù)滨砍。因此學(xué)會(huì)使用 MongoDB 也是爬蟲開發(fā)工程師必須掌握的一個(gè)技能杯瞻。

Windows 下安裝 MongoDB 數(shù)據(jù)庫(kù):

在官網(wǎng)下載 MongoDB 數(shù)據(jù)庫(kù)柑爸。是一個(gè) msi 文件让腹。官網(wǎng)地址  如下:https://www.mongodb.com/download-center?ct=atlasheader#community 

然后雙擊進(jìn)行安裝: 

運(yùn)行 MongoDB :

1. 創(chuàng)建數(shù)據(jù)目錄: 啟動(dòng) MongoDB 之前肾砂,首先要給他指定一個(gè)數(shù)據(jù)存儲(chǔ)的路徑列赎。比如我
在 MongoDB 的安裝路徑下創(chuàng)建一個(gè) data 文件夾,專門用來存儲(chǔ)數(shù)據(jù)
的镐确。 D:\ProgramApp\mongodb\data 包吝。
2. 把 mongodb 的 bin 目錄加入到環(huán)境變量中。方便后期調(diào)用源葫。
3. 執(zhí)行命令 mongod --dbpath D:\ProgramApp\mongodb\data 啟動(dòng)诗越。

連接 MongoDB :

在環(huán)境變量設(shè)置好的前提下,使用以下命令 mongo 就可以進(jìn)入到 mongo 的操作終端了息堂。

使用 Compass 軟件連接 MongoDB :

Compass 是一個(gè)圖形化的操作 MongoDB 的客戶端嚷狞。使用他來操作會(huì)更加方便。

將 MongoDB 制作成 windows 服務(wù):

啟動(dòng) mongodb 后荣堰,如果想讓 mongodb 一直運(yùn)行床未,那么這個(gè)終端便不能關(guān)閉,而且每次運(yùn)行的時(shí)候
還需要指定 data 的路徑振坚。因此我們可以將 mongodb 制作成一個(gè)服務(wù)薇搁,以后就通過一行命令就可
以運(yùn)行了。以下將講解如何制作服務(wù)
  1. 創(chuàng)建配置文件:在 mongodb 安裝的路徑下創(chuàng)建配置文件 mongod.cfg (路徑和名字不是必須和

我這的一樣)渡八,然后在配置文件中添加以下代碼:

logpath=D:\ProgramApp\mongodb\data\log\mongod.log
dbpath=D:\ProgramApp\mongodb\data\db
logpath 是日志的路徑啃洋。 dbpath 是 mongodb 數(shù)據(jù)庫(kù)的存儲(chǔ)路徑传货。
  1. 安裝 mongodb 服務(wù):

使用以下命令即可將 mongodb 安裝成一個(gè)服務(wù):

mongod --config "cfg配置文件所在路徑" --install
比如:
mongod --config "D:\ProgramApp\mongodb\mongod.cfg" --instal
  1. 啟動(dòng) mongodb :

    net start mongodb 
    
  2. 關(guān)閉 mongodb :

     net stop mongodb 
    
  3. 移除 mongodb :

     "D:\ProgramApp\mongodb\bin\mongod.exe" --remove 
    

MongoDB 概念介紹:

SQL術(shù)語/概念 MongoDB術(shù)語/概念 解釋/說明
database database 數(shù)據(jù)庫(kù)
table collection 數(shù)據(jù)庫(kù)表/集合
row document 數(shù)據(jù)記錄行/文檔
column field 數(shù)據(jù)字段/域
index index 索引
joins joins 表連接,MongoDB不支持
primary key primary key 主鍵,MongoDB自動(dòng)將_id字段設(shè)置為主鍵

MongoDB 三元素:

三元素:數(shù)據(jù)庫(kù)、集合宏娄、文檔问裕。

  1. 文檔(document):就是關(guān)系型數(shù)據(jù)庫(kù)中的一行。文檔是一個(gè)對(duì)象孵坚,由鍵值對(duì)構(gòu)成粮宛,

是 json 的擴(kuò)展形式:

{'name':'abc','gender':'1'}
  1. 集合(collection):就是關(guān)系型數(shù)據(jù)庫(kù)中的表∈ⅲ可以存儲(chǔ)多個(gè)文檔窟勃,結(jié)構(gòu)可以不固定。如可

以存儲(chǔ)如下文檔在一個(gè)集合中:

{"name":"abc","gender":"1"}
{"name":"xxx","age":18}
{"title":'yyy','price':20.9}

MongoDB基本操作命令:

  1. db :查看當(dāng)前的數(shù)據(jù)庫(kù)逗堵。

  2. show dbs :查看所有的數(shù)據(jù)庫(kù)秉氧。

  3. use 數(shù)據(jù)庫(kù)名 :切換數(shù)據(jù)庫(kù)。如果數(shù)據(jù)庫(kù)不存在蜒秤,則創(chuàng)建一個(gè)汁咏。(創(chuàng)建完成后需要插入數(shù)據(jù)

庫(kù)才算創(chuàng)建成功)

  1. db.dropDatabase() :刪除當(dāng)前指向的數(shù)據(jù)庫(kù)。

  2. db.集合名.insert(value) :添加數(shù)據(jù)到指定的集合中作媚。

  3. db.集合名.find() :從指定的集合中查找數(shù)據(jù)攘滩。

  4. 更多命令請(qǐng) 見:http://www.runoob.com/mongodb/mongodb-tutorial.html

Python操作 MongoDB :

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

類型 說明
Object ID 文檔ID
String 字符串,最常用纸泡,必須是有效的UTF-8
Boolean 存儲(chǔ)一個(gè)布爾值漂问,true或false
Integer 整數(shù)可以是32位或64位,這取決于服務(wù)器
Double 存儲(chǔ)浮點(diǎn)值
Arrays 數(shù)組或列表女揭,多個(gè)值存儲(chǔ)到一個(gè)鍵
Object 用于嵌入式的文檔蚤假,即一個(gè)值為一個(gè)文檔
Null 存儲(chǔ)Null值
Timestamp 時(shí)間戳,表示從1970-1-1到現(xiàn)在的總秒數(shù)
Date 存儲(chǔ)當(dāng)前日期或時(shí)間的UNIX時(shí)間格式

安裝 pymongo :

要用 python 操作 mongodb 吧兔,必須下載一個(gè)驅(qū)動(dòng)程序磷仰,這個(gè)驅(qū)動(dòng)程序就是 pymongo :

pip install pymongo

連接 MongoDB :

import pymongo
# 獲取連接的對(duì)象
client = pymongo.MongoClient('127.0.0.1',port=27017)
# 獲取數(shù)據(jù)庫(kù)
db = client.zhihu
# 獲取集合(表)
collection = db.qa
# 插入一條數(shù)據(jù)到集合中
collection.insert_one({
    "username":"abc",
    "password":'hello'
})

操作 MongoDB 的主要方法如下:

  1. insert_one :加入一條文檔數(shù)據(jù)到集合中。示例代碼如下:

    collection.insert_one({
        "username":"abc",
        "password":'hello'
    })
    
  1. insert_many :加入多條文檔數(shù)據(jù)到集合中境蔼。
collection.insert_many([
    {
        "username":'abc',
        'password':'111111'
    },
    {
        "username":'bbb',
        'password':'222222'
    },
])
  1. find_one :查找一條文檔對(duì)象灶平。
result = collection.find_one()
print(result)
# 或者是指定條件
result = collection.find_one({"username":"abc"})
print(result)
  1. update_one :更新一條文檔對(duì)象。
collection.update_one({"username":"abc"},{"$set":{"username":"aaa"}})
  1. update_many :更新多條文檔對(duì)象箍土。
collection.update_many({"username":"abc"},{"$set":{"username":"aaa"}})
  1. delete_one :刪除一條文檔對(duì)象逢享。
collection.delete_one({"username":"abc"})
  1. delete_many :刪除多條文檔對(duì)象。
collection.delete_many({"username":"abc"})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末涮帘,一起剝皮案震驚了整個(gè)濱河市拼苍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌调缨,老刑警劉巖疮鲫,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異弦叶,居然都是意外死亡俊犯,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門伤哺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來燕侠,“玉大人,你說我怎么就攤上這事立莉【钔” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵蜓耻,是天一觀的道長(zhǎng)茫舶。 經(jīng)常有香客問我,道長(zhǎng)刹淌,這世上最難降的妖魔是什么饶氏? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮有勾,結(jié)果婚禮上疹启,老公的妹妹穿的比我還像新娘。我一直安慰自己蔼卡,他們只是感情好喊崖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著雇逞,像睡著了一般荤懂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上喝峦,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天势誊,我揣著相機(jī)與錄音,去河邊找鬼谣蠢。 笑死粟耻,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的眉踱。 我是一名探鬼主播挤忙,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼谈喳!你這毒婦竟也來了册烈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤婿禽,失蹤者是張志新(化名)和其女友劉穎赏僧,沒想到半個(gè)月后大猛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡淀零,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年挽绩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驾中。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡唉堪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肩民,到底是詐尸還是另有隱情唠亚,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布持痰,位于F島的核電站灶搜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏共啃。R本人自食惡果不足惜占调,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望移剪。 院中可真熱鬧究珊,春花似錦、人聲如沸纵苛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽攻人。三九已至取试,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間怀吻,已是汗流浹背瞬浓。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蓬坡,地道東北人猿棉。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像屑咳,于是被迫代替她去往敵國(guó)和親萨赁。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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

  • 一兆龙、MongoDB簡(jiǎn)介 1.概述 ? MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)杖爽,由C++語言編寫。旨在為WE...
    鄭元吉閱讀 977評(píng)論 0 2
  • 簡(jiǎn)介 MongoDB 是一個(gè)基于分布式文件存儲(chǔ)的NoSQL數(shù)據(jù)庫(kù) 由C++語言編寫,運(yùn)行穩(wěn)定慰安,性能高 旨在為 WE...
    大熊_7d48閱讀 36,811評(píng)論 1 9
  • 一腋寨、MongoDB簡(jiǎn)介 概述MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),由C++語言編寫泻帮。旨在為WEB應(yīng)用提供...
    王梓懿_1fbc閱讀 493評(píng)論 0 3
  • 一精置、MongoDB簡(jiǎn)介 概述MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)计寇,由C++語言編寫锣杂。旨在為WEB應(yīng)用提供...
    慕楊_閱讀 557評(píng)論 0 4
  • 一、MongoDB簡(jiǎn)介 概述MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù)番宁,由C++語言編寫元莫。旨在為WEB應(yīng)用提供...
    EndEvent閱讀 1,163評(píng)論 1 4