mongodb細講

1、 關係型數據庫(sql)mysql

1.建表sql

 

 

2、非關係型數據庫(nosql  98提出的概念)mongodb

1.不用建庫建表數據直接存入就可數據庫

  

優缺點:json

  關係型:節約資源(學生姓名和課程名不重複出現),開發不方便(需先建庫建表,外鍵等)數組

  非關係型:浪費資源(學生姓名和課程名重複出現),開發方便(不須要建庫建表,數據直接存)服務器

  開發經常使用關係型,爬蟲經常使用非關係型app

 

3、Ubuntu安裝: sudo apt-get install mongodbnosql

  Centos安裝:sudo yum install mongodb3d

4、mongodb基本操做:

  1.啓動:sudo service mongodb start

  2.中止:sudo service mongodb stop

  3.重啓:sudo service mongodb restart

  4.進入客戶端:mongo

    

    出現上圖表明正確進入

  5.退出客戶端:exit、ctrl + c

  6.默認端口:27017

  7.默認配置文件位置:/etc/mongod.conf

  8.默認日誌位置:/var/log/mongodb/mongod.log

  9.查看幫助命令:mongod -help  (或進入mongo直接 help)

  10.關於database的基本命令:

    a.查看全部的庫:show database、  show databases、show dbs

    b.使用一個庫:use 庫名

    c.查看當前庫名:db

    d.切換數據庫:use 庫名

    e.刪除當前數據庫:db.dropDatabase()

    f.第一次向數據庫中加入數據時,數據庫自動建立。

  11.關於集合的基本命令:

    a.不用手動建立集合,向不存在的集合第一次加入數據時,集合會自動建立出來

      

      如圖集合會自動建立

    b.手動建立集合:

      db.createCollection('stu')

      db.createCollection(name, options)

      db.createCollection('stu', {capped:true, size:10})

      參數capped:默認爲false表示不設置上限,當值爲true表示設置上限,參數size當capped爲true時,須要指定此參數,表示上限大小,單位爲字節,若是數據超過上限,會將以前的數據覆蓋。

    c.查看集合:show collections

    d.刪除集合:db.集合名.drop()

  12.數據類型:

    ObjectId:文檔id

    String 字符串,必須是有效的utf-8

    Boolean   存儲一個布爾值    true     false

    Integer 整數    32位或64位取決於服務器

    Double   浮點型

    Arrays    數組,列表,多個值存儲到一個鍵

    Object    一個值就是一個文檔

    Null        存儲Null值

    Timestamp       時間戳,表示從1970.1.1到如今的總秒數

    Date       存儲當前的日期或時間

    ObjectId  是一個12字節的十六進制數,前四個字節是當前的時間戳,接下來三個字節是機器的id,接下來的兩個字節是mongodb的服務進程id最後三個字節是簡單增量值 

  13.數據插入:

    db.集合名.insert(數據)

    db   指的是本數據庫

    集合名   至關於mysql中的表    例:

      

  14.保存:

    db.集合名.save(數據)

    若是_id不存在,則添加數據,若是_id存在,則修改數據

    例:

      

  15.簡單查詢:

    db.集合名.find()  例:

      

  16.複雜查詢:

    比較運算符(等於(默認)、小於($lt)、小於等於($lte)、大於($gt)、大於等於($gte)、不等於($ne))

     例:

      

    邏輯運算符:

      and:直接寫多個條件

        

      or:使用 $or,值爲一個數組,數組中每一個元素爲json

        

         組合使用

        

      $in 範圍以內

      $nin 不在範圍以內

        

  17.排序:

    db.集合名.find().sort({字段:1})   參數1位升序,-1位降序

    升序   db.stu1.find().sort({math:1})

    降序   db.stu1.find().sort({math:-1})

  18.統計個數

    方法count()用於統計結果集中文檔條數

    db.集合名.find().count()

    db.集合名.count({條件})

    

  19.消除重複

    方法distinct()對數據進行去重

    db.集合名.distinct('去重字段',{條件})

    例:

      

  20.更新

    db.集合名.update(<qurey>, <update>, {multi:<boolean>})

    參數query:查詢條件

    參數update:更新操做符

    參數multi:可選,默認值false,表示只更新找到的第一條記錄;值爲true,表示把知足條件的條件所有更新

    

    可見這樣更新有問題,應該這樣:

    

    發現這樣只會更新一條,若更新所有應:

    

   21.刪除

    db.集合名.remove(<query>, {justOne:<boolean>})

    參數query:可選,刪除文檔條件

    參數justOne:可選,默認爲false,表示刪除多條;若是設置爲true或1,則只刪除一條

    

   22.查詢結果處理

    查詢結果格式化:

      db.集合名.find(條件).pretty()

      

      db.集合名.findOne(條件):只返回第一個結果

    指定文檔數量

      方法limit()  用於讀取指定數量的文檔

        db.集合名.find().limit(number)

      方法skip()  用於跳過指定數量的文檔

        db.集合名.find().skip(number)

  23.投影

    在查詢的返回結果中,只選擇必要字段

      db.集合名.find({}, {字段名1:1,字段名2:1})

      參數爲字段名,值1表示顯示,值爲0表示不顯示

      特殊:對於_id列默認是顯示的,若是不顯示須要明確設置爲0

      

 

5、Mongodb聚合aggregate

  聚合(aggregate)是基於數據處理的聚合管道,每一個文檔經過一個由多個階段組成的管道,能夠對每一個階段的管道進行分組、過濾等功能,而後通過一系列處理,輸出響應結果。

  經常使用管道以下:

    $group:將集合重的文檔分組,可用於統計結果。

    

    分組依據放在_id後面。

    統計地址,統計每一個地址的人數。例:

      

    統計每一個地址的平均年齡, 例:

      

    group by null :將集合中全部文檔分爲一組,例:

       

    $project 修改文檔結構,如重命名、增長、刪除字段建立計算結構,例:

      

    $match:數據過濾(管道過濾不能用find)

    (年齡大於20的人按名字分組,統計每一個地址有多少人)

      

    $sort:將輸入文檔排序後輸出

      

    將數據按姓名分組,統計每一個姓名的人數,並按降序排序:

      

    $limit:限制集合管道返回的文檔數,db.stu1.aggregate({$limit:2})

    $skip:跳過指定數量的文檔,並返回餘下文檔,db.stu1.aggregate({$skip:2})

      db.stu1.aggregate({$skip:2}, {$limit:2})

    

6、經常使用表達式

  $sum  計算綜和,$sum:1 表示以一倍計數

  $avg   計算平均值

  $min   獲取最小值

  $max  獲取最大值

 

7、索引:(提升查詢速度)(惟一索引、普通索引、聯合索引)

  

   建立索引:

    語法:db.集合.ensureIndex({屬性:1})      1表示升序,-1表明降序

    查看當前集合全部索引:db.集合.getIndexes()

      

  刪除索引:

    db.集合.dropIndex({索引名稱:1})

     

  在默認狀況下建立 的索引均不是惟一索引

    建立惟一索引:db.集合.ensureIndex({'name':1}, {'unique':true})

    創建聯合索引:db.集合.ensureIndex({'math':1, 'age':1})

     

 8、數據庫的備份和還原

  備份語法:

    遠程備份:

      mongodump -h  dbhost  -d    dbname    -o 路徑

                 服務器IP地址        數據庫名

      mongodump -h 192.168.1.100:27017 -d   test1   -o  /home/test2

      -h:服務器地址,指定端口號

      -d:須要備份的數據庫名稱

      -o:備份存放數據的位置,此目錄放置備份的數據

    本地備份:

      mongodump -d dbname -o 路徑

  還原語法:

    遠程還原:

      mongorestore   -h   dbhost   -d    dbname   -o   路徑

      -h:服務器地址,指定端口號

      -d:須要備份的數據庫名稱

      -o:備份數據所在位置

      mongorestore    -h   192.168.1.100:27017 -d test2   -o   /home/abc/day8/studentback/student

    本機還原:

      mongorestore -d   student2   /home/abc/day8/studentback/student

相關文章
相關標籤/搜索