mongoDB第五講

來源:互聯網
上載者:User

Count+Distinct+Group

1.Count

    請查詢persons中美國學生的人數.

     db.persons.find({country:"USA"}).count()

2.Distinct

     請查詢出persons中一共有多少個國家分別是什麼.

      db.runCommand({distinct:"persons“, key:"country"}).values

3.Group

      文法:

      db.runCommand({group:{

             ns:集合名字,

             Key:分組的鍵對象,

             Initial:初始化累加器,

             $reduce:組分解器,

             Condition:條件,

             Finalize:組完成器

      }})

      分組首先會按照key進行分組,每組的 每一個文檔全要執行$reduce的方法,

      他接收2個參數一個是組內本條記錄,一個是累加器資料.

 3.1請查出persons中每個國家學生數學成績最好的學生資訊(必須在90以上)

db.runCommand({group:{

ns:"persons",

key:{"country":true},

initial:{m:0},

$reduce:function(doc,prev){

if(doc.m > prev.m){

prev.m = doc.m;

prev.name = doc.name;

prev.country = doc.country;

}

},

condition:{m:{$gt:90}}

}})  

3.2在3.1要求基礎之上把每個人的資訊連結起來寫一個描述賦值到m上

finalize:function(prev){

 prev.m = prev.name+" Math scores "+prev.m

}

4.用函數格式化分組的鍵

  4.1如果集合中出現鍵Counrty和counTry同時存在

db.persons.insert({
 name:"USPCAT",
 age:27,
 email:"2145567457@qq.com",
 c:89,m:100,e:67,
 counTry:"China",
 books:["JS","JAVA","EXTJS","MONGODB"]
})

那分組有點麻煩這要如何解決呢?

 db.runCommand({group:{
 ns:"persons",
 $keyf:function(doc){
  if(doc.counTry){
   return {country:doc.counTry}
  }else{
   return {country:doc.country}
  }
 },
 initial:{m:0},
 $reduce:function(doc,prev){
  if(doc.m > prev.m){
   prev.m = doc.m;
   prev.name = doc.name;
   if(doc.country){
    prev.country = doc.country;
   }else{
    prev.country = doc.counTry;
   }
  }
 },
 finalize:function(prev){
  prev.m = prev.name+" Math scores "+prev.m
 },
 condition:{m:{$gt:90}}
}})

資料庫命令操作

1.命令執行器runCommand

  1.1用命令執行完成一次刪除表的操作

db.runCommand({drop:"map"})

{

       "nIndexesWas" : 2,

       "msg" : "indexes dropped forcollection",

       "ns" : "foobar.map",

       "ok" : 1

}

2.如何查詢mongoDB為我們提供的命令 

        1.在shell中執行 db.listCommands()

        2.訪問網址http://localhost:28017/_commands,需要先通過

     mongod --dbpath d:\app\mongodata --rest命令開啟簡單的rest API

3.常用命令舉例

         3.1查詢服務器版本號碼和主機作業系統

        db.runCommand({buildInfo:1})   

         3.2查詢執行集合的詳細資料,大小,空間,索引等……

        db.runCommand({collStats:"persons"})

         3.3查看操作本集合最後一次錯誤資訊

        db.runCommand({getLastError:"persons"})

固定集合特性

2.固定特性

       2.1固定集合預設是沒有索引的就算是_id也是沒有索引的

       2.2由於不需分配新的空間他的插入速度是非常快的

       2.3固定集合的順是確定的導致查詢速度是非常快的

       2.4最適合的是應用就是日誌管理

3.建立固定集合

       3.1建立一個新的固定集合要求大小是100個位元組,可以儲存文檔10個

            db.createCollection("mycoll",{size:100,capped:true,max:10})

        3.2把一個普通集合轉換成固定集合

             db.runCommand({convertToCapped:”persons”,size:100000})

4.反向排序,預設是插入順序排序.

        4.1查詢固定集合mycoll並且反響排序

             db.mycoll.find().sort({$natural:-1})

5.尾部遊標,可惜shell不支援java和php等驅動是支援的

        5.1尾部遊標概念

             這是個特殊的只能用到固定集合身上的遊標,他在沒有結果的時候

             也不回自動銷毀,而是一直等待結果的到來

GridFS檔案系統

1.概念

          GridFS是mongoDB內建的檔案系統他用二進位的形式隱藏檔

          大型檔案系統的絕大多是特性GridFS全可以完成

2.利用的工具mongofiles.exe

3.使用GridFS

          3.1查看GridFS的所有功能

          cmd:mongofiles

          3.2上傳一個檔案

           mongofiles -d foobar -l"E:\a.txt" put "a.txt“

          3.3查看GridFS的檔案儲存體狀態

                集合查看

                db.fs.chunks.find() 和db.fs.files.find() 儲存了檔案系統的所有檔案資訊

3.4查看檔案內容

    E:\>mongofiles -d foobar get "a.txt“

    VUE可以查看,shell無法開啟檔案

3.5查看所有檔案

    mongofiles -d foobar list

3.5刪除已經存在的檔案VUE中操作

    mongofiles -d foobar delete 'a.txt'

伺服器端指令碼

1.Eval

    1.1伺服器端運行eval

          db.eval("function(name){return name}","uspcat")

2.Javascript的儲存

    2.1在服務上儲存js變數活著函數共全域調用

         1.把變數載入到特殊集合system.js中

            db.system.js.insert({_id:name,value:”uspcat”})

         2.調用

             db.eval("return  name;")

System.js相當於Oracle中的預存程序,因為value不單單可以寫變數

還可以寫函數體也就是javascript代碼

 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.