Count+Distinct+Group
Count关键字:请查询persons中美国学生的人数。
db.persons.find({country:"USA"}).count()
Distinct关键字: 请查询出persons中一共有多少个国家分别是什么。
db.runCommand({distinct:"persons",key:"country"}).values
Group关键字:请查出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.1要求基础之上吧没个人的信息链接起来写一个描述赋值到m上
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;
}
},
finalize:function(prev){
prev.m = prev.name+" Math scores "+prev.m
},
condition:{m:{$gt:90}}
}})
如果集合中出现键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
db.runCommand({drop:"map"})
2、如何查询mongoDB为我们提供的命令
//在shell中执行
db.listCommands()
//在启动的时候添加--rest
mongod --dbpath D:\mongoDBData --rest
//访问 http://localhost:28017/_commands
端口号等于启动mongoDB的端口号+1000
3、常用命令举例
//查询服务器版本号和主机操作系统
db.runCommand({buildInfo:1})
//查询执行集合的详细信息,大小,空间,索引等……
db.runCommand({collStats:"persons"})
//查看操作本集合最后一次错误信息
db.runCommand({getLastError:"persons"})
固定集合
1、特性
固定集合默认是没有索引的就算是_id也是没有索引的
由于不需分配新的空间他的插入速度是非常快的
固定集合的顺是确定的导致查询速度是非常快的
最适合的是应用就是日志管理
2、创建固定集合
//创建一个新的固定集合要求大小是100个字节,可以存储文档10个
db.createCollection("mycoll",{size:100,capped:true,max:10})
//把一个普通集合转换成固定集合
db.runCommand({convertToCapped:”persons”,size:100000})
3、反向排序,默认是插入顺序排序.
//查询固定集合mycoll并且反响排序
db.mycoll.find().sort({$natural:-1})
4、尾部游标
shell不支持,java和php等驱动是支持尾部游标概念。这是个特殊的只能用到固定级和身上的游标,他在没有结果的时候,也不回自动销毁他是一直等待结果的到来。
GridFS文件系统
GridFS是mongoDB自带的文件系统他用二进制的形式存储文件大型文件系统的绝大多是特性GridFS全可以完成。使用mongoDB自带工具mongofiles可以使用GridFS。
//在cmd中操作,查看所有操作
mongofiles --help
//在cmd中操作,上传一个文件
mongofiles -d foobar -l "E:\a.txt" put "a.txt“
查询已经上传的文件:
db.fs.chunks.find()
db.fs.files.find()
其他操作:
//VUE操作,shell无法操作
//查看文件内容
mongofiles -d foobar get "a.txt“
//打开文件
mongofiles -d foobar list
//删除已经存在的文件
mongofiles -d foobar delete 'a.txt'
服务器端脚本
1.Eval
//服务器端运行eval
db.eval("function(name){ return name}","uspcat")
2.Javascript的存储
在服务上保存js变量活着函数共全局调用
//把变量加载到特殊集合system.js中
db.system.js.insert({_id:name,value:”uspcat”})
//调用
db.eval("return name;")
System.js相当于Oracle中的存储过程,因为value不单单可以写变量
还可以写函数体也就是javascript代码