Mongodb的安裝及使用(一)
Mongodb 與 python 的交互(二)
mongodb數(shù)據(jù)庫備份和恢復(fù)(三)
1.Mongodb下載安裝
官方網(wǎng)站
注意:偶數(shù)為穩(wěn)定版鞋屈,如1.6寨闹,奇數(shù)為開發(fā)版,如1.7
1.1Windows下Mongodb安裝
這里用的是zip安裝指么,安裝完畢后
先進(jìn)入mongodb安裝的位置,在此處打開cmd窗口輸入命令啟動數(shù)據(jù)庫
mongod --dbpath D:\軟件安裝\MongoDB\data\db(此處是db的路徑)
打開一個新的窗口輸入命令mongo,用于數(shù)據(jù)庫操作
1.2.ubuntu上安裝Mongodb
1.打開終端輸入一下命令:
sudo apt-get install mongodb
2.查看版本:
mongo -version
3.啟動數(shù)據(jù)庫
sudo mongo
1.3.安裝pymongo
PyMongo是Mongodb的Python接口開發(fā)包榴鼎,是使用python和Mongodb的推薦方式伯诬。
用Python操作MongoDB需要通過PyMongo,輸入命令安裝
pip install pymongo 默認(rèn)安裝
pip install pymongo==2.8 安裝指定版本
pip install –upgrade pymongo 升級PyMongo
2.Mongodb簡介
什么是NoSQL數(shù)據(jù)庫
·數(shù)據(jù)庫:進(jìn)行高效的、有規(guī)則的進(jìn)行數(shù)據(jù)持久化存儲的軟件
·NoSQL:指的是非關(guān)系型的數(shù)據(jù)庫巫财。NoSQL有時也稱作Not Only SQL的縮寫盗似,是對不同于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)的統(tǒng)稱。
NoSQL用于超大規(guī)模數(shù)據(jù)的存儲平项。(例如谷歌或Facebook每天為他們的用戶收集萬億比特的數(shù)據(jù))赫舒。這些類型的數(shù)據(jù)存儲不需要固定的模式悍及,無需多余操作就可以橫向擴(kuò)展。
·NoSQL數(shù)據(jù)庫:Notonly sql接癌,指代非關(guān)系型數(shù)據(jù)庫
·優(yōu)點(diǎn):高可擴(kuò)展性心赶、分布式計(jì)算、低成本扔涧、靈活架構(gòu)园担、半結(jié)構(gòu)化數(shù)據(jù)庫、簡化關(guān)聯(lián)關(guān)系
·缺點(diǎn):沒有標(biāo)準(zhǔn)化枯夜、有限查詢弯汰、不直觀
常見NoSQL數(shù)據(jù)庫
·列儲存:Hbase、Cassandra湖雹、Hypertable
·文檔存儲:MongoDB咏闪、CouchDB
·K-V存儲:TokyCabinet、BerkeleyDB摔吏、MencacheDB鸽嫂、redis
·對象存儲:Neo4j、Versant
·Xml數(shù)據(jù)庫:BerkeleyDB征讲、Basex
3据某、MongoDB概述
·MongoDB 是一個機(jī)遇分布式文件存儲的NoSQL數(shù)據(jù)庫
·C++編寫的運(yùn)行穩(wěn)定性能高得數(shù)據(jù)庫
模式自由
面向集合
完整索引支持
復(fù)制和高可用性
more...
3.1Mongodb術(shù)語解釋
·database-database:數(shù)據(jù)庫
·table-collection:數(shù)據(jù)庫表-集合
·row-document:數(shù)據(jù)記錄-文檔
·column-field:數(shù)據(jù)字段-域
·index-index:索引-索引
·table-join-None:表連接
·primary key-primary key:主鍵
3.2MongoDB基本語法——數(shù)據(jù)類型
·集合就是關(guān)系型書庫中的表
·文檔對應(yīng)關(guān)系型數(shù)據(jù)庫中的行
·文檔:就是一個JSON對象,由KEY=VALUE鍵值對構(gòu)成
{“name”:”admin”, “gender”:”男”}
集合:存儲多個文檔诗箍,結(jié)構(gòu)不固定
{“name”:”admin”, “gender”:”男”}
{“name”:”manager”, “age”:23}
{“name”:”manager”, “phone”:”16868686868”}
·數(shù)據(jù)庫:存儲多個集合
·服務(wù)器:一個服務(wù)器中可以包含多個數(shù)據(jù)庫
ObjectID:文檔id
String:字符串
Boolean:布爾值
Integer:整數(shù)
Double:浮點(diǎn)數(shù)
Arrays:數(shù)組或者列表
Object:嵌入的文檔
Null:空值
Timestamp:時間戳
Date:日期時間
4.Mongodb基本使用
4.1.基本操作
·mongoDB將數(shù)據(jù)存儲為一個文檔
·數(shù)據(jù)由 key=value 的鍵值對的形式組成
·數(shù)據(jù)的操作:增刪改查
·nosql三元素:數(shù)據(jù)庫 – 集合 – 文檔 [--域]
4.2.基本語法
數(shù)據(jù)庫操作:
·db:查看當(dāng)前指向的數(shù)據(jù)庫
·show dbs:查看當(dāng)前所有的數(shù)據(jù)庫
·use <數(shù)據(jù)庫名稱>:指向一個數(shù)據(jù)庫
Use數(shù)據(jù)庫不會創(chuàng)建數(shù)據(jù)庫癣籽,如果操作數(shù)據(jù)會自動創(chuàng)建數(shù)據(jù)庫
·db.dropDatabase():刪除當(dāng)前指向的數(shù)據(jù)庫
集合操作
·show collections:查看當(dāng)前數(shù)據(jù)庫所有集合
·db.createCollection(<c_name> [, options]):創(chuàng)建一個集合
·db.<集合名稱>.drop():刪除指定的集合
show collections 查看當(dāng)前庫中所有的集合,后面的collections不要加括號
db.createCollection(name, [optinos])
創(chuàng)建一個名稱為name的集合滤祖,后面的options表示創(chuàng)建的附帶選項(xiàng)
db.createCollection(“emp”):創(chuàng)建一個名稱為emp的名稱的集合
db.createCollection(“dept”, {“capped”: true, size: 5}):capped默認(rèn)false
表示不設(shè)置上限筷狼,true表示設(shè)置上限需要設(shè)置size參數(shù)~表示達(dá)到上限時會將之前的數(shù)據(jù)覆蓋
增加數(shù)據(jù)
·語法:db.<集合名稱>.insert(文檔)
·集合可以是原來存在的,可以是不存在的
·文檔:就是JSON格式表示的數(shù)據(jù)
·簡單查詢:db.<集合名稱>.find()查詢指定集合的數(shù)據(jù)
db.student.insert({name:”jerry”, gender:”男”})
db.student.insert({_id:”1”, name:”tom”, gender:”女”, age:18})
更新數(shù)據(jù)
·語法:db.<集合名稱>.update(<query>, <update>,[multi:<boolean>])
·指定屬性更新:$opration
·multi:默認(rèn)false更新符合條件第一條匠童,設(shè)置true全集合更新
#更新符合條件的文檔
db.student.update({name:”tom”}, {name:”jerry”})
#更新符合條件的文檔中符合條件的域
db.student.update({name:”tom”}, {$set:{name:”jerry”}})
#更新符合條件的多行文檔及對應(yīng)的域
db.student.update({}, {$set:{name:”donghua”}}, {multi:true})
保存數(shù)據(jù)
·語法:db.<集合名稱>.save(文檔)
·特征:[ _id ]如果數(shù)據(jù)不存在就添加埂材,如果數(shù)據(jù)存在修改
刪除數(shù)據(jù)
·語法:db.<集合名稱>.remove(<query>, {justone:<boolean>})
·參數(shù)query:刪除文檔的條件
·參數(shù)justOne:設(shè)置為true或者1,刪除一條汤求;默認(rèn)false刪除多條
查詢數(shù)據(jù)
基本查詢
·find([{文檔條件}]):全集合查詢
·findOne([{文檔條件}]):查詢第一個
·pretty():將查詢結(jié)果格式化展示
比較運(yùn)算符
默認(rèn)判斷俏险,無運(yùn)算符
$lt:little~小于 <
$lte:little or equals~小于等于 <=
$gt:granter~大于 >
$gte:granter or equals~大于等于 >=
#查詢名稱為jerry的學(xué)生
db.student.find({name:”jerry”})
#查詢年齡已經(jīng)適婚年齡的學(xué)員
db.student.find({age:{$gte:20}})
邏輯運(yùn)算符
·邏輯與:并且運(yùn)算,默認(rèn)操作首昔,無運(yùn)算符
·邏輯或:或者運(yùn)算寡喝,$or
#查詢年齡已經(jīng)適婚年齡并且性別為女的學(xué)員
db.student.find({age:{$gte:20}, gender:”女”})
#查詢年齡大于18或者性別為男的學(xué)員
db.student.find({$or:[{age:{$gt:18}, {gender:”女”}]})
范圍運(yùn)算符
·$in:判斷指定條件是否包含在某個范圍內(nèi)
·$nin:判斷指定條件是否不包含在某個范圍內(nèi)
#查詢年齡在18或者20的學(xué)員
db.student.find({age: {$in:[18,20]}})
#查詢年齡不是18 的學(xué)員
db.student.find({age: {$nin : [20]}})
限制查詢條數(shù)
<find>.limit(count)
排序
<find>.sort({字段:1/-1, ...})
db.student.find().sort({name:1})
1.表示升序排列 -1表示降序排列,可以指定多個字段
統(tǒng)計(jì)
<find>.count()
db.<集合名稱>.count({條件})
兩種操作方式
1.查詢結(jié)果勒奇,通過count()統(tǒng)計(jì)數(shù)據(jù)
2. 通過count()直接添加條件統(tǒng)計(jì)數(shù)據(jù)
去重
db.<集合名稱>.distinct(“去重域名稱”, {條件})
查詢數(shù)據(jù)列表中,所有的年齡分布情況
db.student.distinct(“age”, {})
分頁
#隔n個數(shù)據(jù)查詢m個數(shù)據(jù)
db.hero.find().pretty().limit(m).skip(n)