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代碼