MongoDB介紹及CRUD操做

MongoDB介紹

mongodb屬於nosql數據庫,是一個文檔型數據庫,nosql實際上是相對於sql數據庫而言的。傳統的sql數據庫存在一系列的問題。好比:須要遵循ACID範式,數據量過大的時候性能降低,不太容易作擴展等問題。nosql則解決了這樣的問題
nosql具備如下特色:mysql

  • 簡單的數據模型
  • 元數據和數據分離
  • 弱一致性
  • 高吞吐量
  • 高水平擴展能力和低端硬件集羣
    mongodb數據庫自己就支持數據切片和分佈式,很是易於擴展。並且mongodb的數據建模無需事先定義,適用於非強事務性的數據存儲場景。

mongodb經常使用操做:

安裝:

  • 經過yum安裝
  • 經過rpm包安裝
  • 經過編譯安裝
  • 直接解壓二進制文件安裝

安裝軟件類型

  • mongod:mongodb服務啓動項
  • mongo:mongodb的shell接口
  • tools:各類數據管理工具

mongodb數據結構介紹

mongodb數據結構有以下幾種:web

  • db:數據庫,對應mysql的db
  • collection:文檔集合,對應於mysql的table
  • document:文檔,對應於mysql的記錄。
    mongodb的document是json格式的數據字串。在往mongodb插入數據的時候不須要實現定義數據庫範式,不一樣document的字段個數也不須要一致。

經常使用命令

help()        #獲取幫助信息
show dbs    #列出當前數據庫
show collections    #列出指定庫中數據表
show users        #列出用戶
show profile    #列出當前數據庫全部性能參數
show logs        #列出日誌
show log()        #列出指定日誌
db.stats()        #列出數據庫狀態
db.version()       #列出數據庫版本
db.serverStatus()    #列出數據庫所在服務器狀態信息
db.getcollectionNames()    #列出當前庫全部collection
db.collection.stats()        #列出當前collection的信息

CRUD操做

> use db_name        #切換和建立數據庫,mongodb不須要手動建立數據庫,執行此命令其實已經建立數據庫了,可是此時show dbs不會顯示,只有往db中插入數據纔會顯示

> db.students.find()    #列出全部document

> db.students.find({age:{$lt: 1}})    #列出age小於1的全部數據

> db.students.find({age:{$lt: 1}}).count()    #統計全部age小於1的數據個數

> db.students.find({age:{$lt:9}}).limit(3)    #僅顯示3條age小於9的數據

> db.students.find({age:{$lt:9}}).skip(3)    #顯示age小於9的數據,跳過前三條

> db.students.findOne({age:{$lt:9}})    #僅顯示一條age小於9的數據

> db.students.find({age:{$in:[10,20]}})    #顯示年齡在10到20中間的數據

> db.students.find({$or:[{name:'student15'},{age:10}]}) #查找name爲student15或者age爲10的用戶

> db.students.find({$and:[{name:'student15'},{age:10}]}) #查找name爲student15而且age爲10的用戶

> db.students.find({class:{$exists:true}})  查詢存在class字段的文檔

> db.studnets.update({name:"tom"},{$set:{age:21}}})    #修改tom的age爲21

find操做支持以下高級用法:sql

  1. 比較操做
  • $gt:大於
  • $gte:大於等於
  • $lt:小於
  • $lte:小於等於
  • $ne:不等於
  • $in:在某個取值範圍內
  • $nin:不在某取值範圍內
  1. 組合條件查詢
  • $or:或
  • $and:與
  • $not:非
  • $nor:異或,返回不符合指定條件的document
  1. 元素查詢
  • $exists:返回存在某字段的數據
  • $mod:對指定字段進行取模操做
  • $type:返回指定字段類型爲指定類型的文檔,語法格式{field:{$type:<BSON type}};1 Double(雙精度),2 String,3 Object(對象),Array,Binary data,Undefined,Boolean,Date,Null,Regular Expression,JavaScripy,TimeStampmongodb

    注意:每一種數據類型都有一種數字來表示此類型shell

update經常使用操做:數據庫

  • $set:重置某字段值,語法格式({field:value},{$set:{field:new_value}})
  • $unset:刪除某指定字段
  • $rename:對某字段重命名,語法格式({field:value},{$unset:{field1,field2,...}})
  • $inc:增長一個字段的值,實現自增加

刪除經常使用操做:json

db.mycoll.remove(<query>,<justOne>)     justOne指定要刪除的個數
db.mycoll.remove({age:21})  刪除年齡爲21的文檔
db.mycoll.drop()    刪除當前指定coll
db.dropDatabase()   刪除庫,須要先切換到庫中

mongodb的索引

mongodb支持的索引類型:服務器

  • 單字段索引:構建一個字段的索引
  • 組合索引:構建多字段的索引
  • 多鍵索引:索引建立於子文檔的索引
  • 空間索引:基於位置的索引
  • 文本索引:搜索整個文檔的文本串
  • hash索引:只適用於精確查找,hash索引不論數據多少,查詢速度都是一致的數據結構

    注意:按照範圍查詢使用的是樹狀索引併發

索引操做命令

db.students.ensureIndex({name:1})    #在name上建立升序索引,1表示升序索引,通常索引名即爲字段名,能夠經過name來額外指定索引名
db.students.getIndexes()    #獲取在students上的全部索引
db.students.dropIndexes()    #刪除全部索引
db.students.dropIndex(Index_name)    #刪除指定名字索引
db.reIndex()    #重建索引
db.students.find(name:"student5000").explain()    #顯示語句的執行過程

索引經常使用操做:

  • backgroup:true:表示在後臺建立索引
  • unique:ture:表示在指定字段建立惟一鍵索引,不能插入重複值,不然會報錯
  • dropDups:true:刪除原有相同數據
  • sparse:true:建立稀疏索引

    注意:
    稀疏索引:多個字段取值共用一個索引項,好比1到5歲的人指向一個索引。索引體積小,可是可能須要作二次查找
    稠密索引:每個字段取值都有一個單獨的索引項

mongodb經常使用服務器選項

經常使用服務器選項:

  • fork={true|false} mongod是否運行於後臺
  • bind_ip=IP 啓動以後監聽地址
  • port=PORT 監聽端口,默認27017,web端口28017
  • maxConns= 最大併發鏈接數,默認爲1000000
  • logpath 日誌位置,歷史事件日誌
  • syslog 由syslog管理日誌
  • syslogFacility
  • logappend 是否使用日誌滾動
  • keyFile 集羣關係認證的私鑰文件位置
  • setParameter
  • httpinterface 是否啓用內置的web監控接口,默認28017
  • clusterAuthMode 集羣認證
  • nounixsocket 是否監聽於本地套接字
  • unixSocketPrefix 在哪一個路徑建立套接字
  • auth={ture|faluse} 是否在數據庫級別啓用認證功能
  • repair 啓動mongodb時先去修復database,進程意外終止致使數據沒有同步時使用
  • journal 啓用日誌功能,保證數據一致性的日誌,比較相似事務日誌,單實例模型下必定要啓用
  • journalCommitInterval 日誌提交時間間隔,數據隔一段時間寫入硬盤,把隨機IO變成順序IO
  • oplogSize oplog大小,默認爲可用磁盤空間5%,最小1G
    調試相關選項:
  • cpu 週期性顯示cpu和iowait的利用率信息
  • sysinfo 顯示系統級別診斷相關信息
  • slowms 界定慢查詢的時間,單位是毫秒
  • profile={0,1,2} 剖析系統問題,0關閉,1慢查詢,2剖析全部操做
相關文章
相關標籤/搜索