您的位置:首页 > 数据库 > Mongodb

mongoDB第五讲

2014-04-02 00:26 239 查看
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代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: