1. 程式人生 > >Mongodb資料庫的安裝及使用

Mongodb資料庫的安裝及使用

  • Linux下安裝

  1. 準備內容:需要有一個MongoDB在Linux下的安裝包
  2. 解壓縮安裝包
    解壓到桌面即可
    tar -zxvf mongo....gz
  3. 將解壓完成的的檔案中的內容移動到 /usr/local/mongodb 目錄下
     sudo mv mongodb...af/  /usr/local/mongodb
     /usr/local/mongodb  : mongodb的安裝路徑
  4. 在mongodb目錄下建立data目錄,在data目錄下建立db及log目錄 
    目前db的路徑為 /usr/local/mongodb/data/db

                  文件連結  密碼:i5dg  

  • windows下的安裝:視覺化簡單安裝,詳見上面安裝文件。
     

  • 使用:
      

    一、啟動
       1.在windows中啟動:
            1.切換到 安裝目錄的bin目錄下
                e: 切換碟符
            2. cd E:\Program Files\MongoDB\Server\3.4\bin 切換路徑
            3.啟動服務端,並指定資料的儲存路徑   
             格式: mongod --dbpath=資料儲存路徑
             如:  mongod --dbpath=E:\Program Files\MongoDB\Server\3.4\data\db
              注意有些需要加上引號   mongod --dbpath="E:\Program Files\MongoDB\Server\3.4\data\db"

           4.啟動客端端  ---  注:不要關閉服務
              1.先啟動cmd =,切換到 安裝目錄的bin目錄下
              2.執行啟動
             格式: mongo.exe   看到 >  即可
            
        2.Linux下啟動:
            1.啟動mongodb的伺服器端
             進入到mongodb的bin目錄下,執行以下命令
             ./mongod -dbpath=data/db的路徑
             ./mongod -dbpath=/usr/local/mongodb/data/db
             見到port為27017時代表啟動成功

           2.啟動mongodb的客戶端 (之前的伺服器端不能關閉,重新開啟一個終端)
           進入到mongodb的bin目錄下,執行以下命令
           ./mongo
    二、資料庫操作
        1.檢視所有的資料庫
        格式:  

    show databases;


        簡寫:

    show dbs;


            
        2.建立或者使用一個數據庫
          格式: use  資料庫名;      

    use school;

           
          當對應的資料庫不存在的時候,表示建立該資料庫
          如果資料庫已經存在,表示使用該資料庫

          注意:如果建立了一個新的資料庫,而該資料庫中沒有資料,則使用
          show dbs檢視的時候,任然看不到,插入資料庫後,即可檢視到
           插入資料如: db.student.insert({name:"haha"})
        3.檢視當前使用的資料庫
            格式: db  代表的是當前資料庫
            或者  db.getName() 可以檢視當前資料庫的名字
            
        4.刪除當前資料庫

    db.dropDatabase()

       
       5.幫助命令 help
       6.退出 
           exit
    三、集合的操作 ---相當於關係型資料庫的 表
       1.檢視當前庫中的所有集合
          格式: show collections;
       2.建立一個集合
          方式1:  db.createCollection("集合名")    集合名需要加上引號
                 例:db.createCollection("集合名")


          方式2:  db.集合名.insert(資料)
                 例:db.student2.insert({name:"張三"})

        區別: 方式1是建立一個空的集合,如果集合已經存在,不會覆蓋建立
               
              方式2:如果對應的集合不存在表示建立一個集合,並插入資料
                    如果對應的集合存在,表示直接插入一條資料!
       3.刪除一個集合
          格式:  db.集合名.drop() 

    四、文件的操作
    相當於關係型資料庫表中一行資料 row 
         1.插入資料
           1_1.新增一個數據 
              格式: db.集合名.insert(資料)
              資料: key-value的形式
              是bson格式, 與json格式一樣
              格式:
                 1_ 1_1.  {key1:value,key2:value, keyN:value}
                 1_1_ 2. [ {key1:value,key2:value, keyN:value}, {key1:value,key2:value, keyN:value}]  jsonArray
                 1_1_3. {key1:巢狀json資料,key2:value, keyN:value}     

           例:

     db.student.insert({name:'張三',age:66,address:"北京",sex:"男"})


               WriteResult({ "nInserted" : 1 })表示插入成功
             注意: mongodb插入資料的時候,會預設生成一個 _id相當於關係型資料庫中的主健
                如: "_id" : ObjectId("5b8f45c12e3e35173c33f13c")
         1_2.新增多個數據
              格式: db.集合名.insert([資料1,資料2,資料n])
               例:

    db.student.insert([{name:'李四',age:66,address:"北京",sex:"女"},{name:'王
    五',age:56,address:"陝西",sex:"女"},{name:'趙六',age:46,address:"上海",sex:"男"},{name:'田
    七',age:76,address:"西安",sex:"男"},{name:'吳九',age:86,address:"東京",sex:"男"}])


           1_3.插入資料 save 儲存
               格式: db.集合名.save(資料)    使用方法與insert一致
              例:

    db.student.save({name:'張某某',age:30,address:"大理",sex:"未知"})


              
               insert和save區別: 
              如果使用save設定_id屬性,且_id已經存在時, 會修改資料
              而使用insert設定_id屬性,_id已經存在時, 會報錯。
              

    2.查詢資料---結果是 bson的形式
          2_1.查詢所有的資料
            格式: db.集合名.find()
             
          2_2.根據條件來查詢資料 --關係資料庫: select 欄位名,  from 表 where 條件
              格式: db.集合名.find(query,names)
              引數query是查詢條件 
              引數names 是要展示的欄位名

              注意: query,names都是json的資料格式
              query引數 如:   {age:76}  表示查詢age = 76的資料
              names引數  如:  {name:1,age:1} 表示只顯示name屬性和age屬性
              注意如果沒有names,則所有的屬性及值都顯示
              1表示顯示,  0 表示不顯示

             需求:查詢年齡是76歲的人的姓名,地址
                      例:

    db.student.find({age:76},{name:1,age:1})

           
          2_3.查詢一條資料
           格式: db.集合名.findOne(query,names)
             例:

    db.student.findOne({name:'李四'})

          
          2_4.根據_id來查詢
             例:

    db.student.findOne({"_id":ObjectId("5b8fc2cf739ba435b9c6be32")})
    


          2_5.格式化查詢結果
            格式: db.集合名.find().pretty()
            例:

    db.student.find().pretty()


                  
       3.資料的修改
          格式:db.集合名.update(query,set,{upsert:布林型別,multi:布林型別})
                 引數都是json的格式      
          3_1.query  查詢條件
          3_2.set   要修改的屬性和對應的屬性值
        
         需求: 將李四的性別改為男
          例:

    db.student.update({name:'李四'},{sex:'男'})

          
          注意: 如果以以上方式修改,是將整個資料改為 {sex:'男'},而不是隻修改sex屬性
                   只修該屬性:     
            格式:db.集合名.update(query,{$set:{屬性名:屬性值}})

    db.student.update({name:'張三'},{$set:{sex:'女'}})


         格式:db.集合名.update(query,{$inc:{屬性名:值}}) 
         例:

    db.student.update({name:"田七"},{$inc:{age:10}}) 

        表示在某個屬性上新增某個值

         3_3. upsert 表示在修改資料的時候,如果查詢條件沒有找到對應的資料,
                 是否將修改的內容當作新的資料新增到集合中
                 true 表示新增進來
                false 表示不當作新資料新增進來
                預設是false
            例:
              

    db.student.update({name:"孫某某"},{address:"深圳"},{upsert:true})


        3_4.multi 表示在修改資料的時候,如果查詢出了多條符合條件的資料,是否將多條資料全部進行修改
              true 表示全部都修改
          false 表示值修改匹配的第一條資料

          預設是false
              例:
          

    > db.student.update({sex:"女"},{$set:{address:"上海"}},{multi:true})
    


         
       4.刪除資料 ---- delete from 表名 where 條件
         格式:db.集合名.remove(query,{justOne:布林值})
         例:
         

    db.student.remove({address:"深圳"})
    db.student.remove({sex:"男"},{justOne:true})


         注意:預設會將所有符合條件的資料都刪除,
         justOne表示是否只刪除 第一條符合條件的資料 
          true 只刪除一條, false表示全部刪除,  預設為false

五、查詢條件
    1.比較運算子
       $gt 大於
       $lt  小於
       $gte 大於等於
       $lte  小於等於
       $eq   等於   或者  :
       $ne   不等於
       
        格式: db.集合名.find({欄位名:{運算子:值}})

       需求:查詢年齡大於60的student
        例:

db.student.find({age:{$gt:60}})


    2.邏輯運算子
      $and  且    或者   ,  
           格式1: db.集合名.find({條件1,條件2})
           格式2:db.集合名.find({$and:[{條件1},{條件2}]})

        需求:找出年齡在50歲以上,60歲以下的女性的資料?
        

> db.student.find({$and:[{sex:"女"},{age:{$gt:50}},{age:{$lt:60}}]})

      
        
           需求:查詢年齡在大於等於40且小於等於60的資料
           error :  db.student.find({age:{$gte:40},age:{$lte:60}})
           正確寫法:  db.student.find({age:{$gte:40,$lte:60}})
           注意: 以上寫法後面的屬性會覆蓋前面的屬性

      $or   或者
          格式:   db.集合名.find({$or:[{條件1},{條件2}]})  
          寫法同上,把and換成or即可。

      $not   非
     格式:   db.集合名.find({$not:{條件1}}) 
    
    3.模糊運算子

       格式: db.集合名.find({欄位名:/匹配的資料/})
       注意: / /   不需要將引號
  
       需求:查找出名字中包含張字的資料

db.student.find({name:/張/})

    /^字元/   表示以某個字元開始的資料
    /字元$/   表示以某個字元結尾的資料
       需求: 查找出姓 張 的資料
       

db.student.find({name:/^張/})

 
   
   4.分頁  ---- 關係:  limit 值1,值2
     limit(number) 表示讀取指點數量的資料  相當於 值2
     skip(position) 表示跳到指定位置開始讀資料    注: 位置從 0 開始     相當於值1
      
     

db.student.find().skip(1) 
db.student.find().limit(1) 

     需求: 每頁3條資料,獲取3頁資料
     

 db.student.find().skip(6).limit(3)


     需求: 每頁m條資料,獲取n頁資料
     格式: db.student.find().skip((n-1)*m).limit(m)
      
   5.排序 sort    欄位名 升序/降序
      格式:   db.student.find().sort({欄位名:1/-1})   1: 表示升序    -1: 降序
      需求: 按照年齡的升序排序

db.student.find().sort({age:1})


   
   6.計算查詢結果的數量    
       

db.student.find().count()