`
webdev2014
  • 浏览: 680063 次
文章分类
社区版块
存档分类
最新评论

mongoDB第五讲

 
阅读更多

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

分享到:
评论

相关推荐

    09MongoDB第五讲上A

    09MongoDB第五讲上

    MongoDB基础入门视频教程

    教程名称:MongoDB基础入门视频教程课程目录:【】mongodb 视频 第一讲【】mongodb 视频 第二讲【】mongodb 视频 第三讲【】mongodb 视频 第四讲【】mongodb 视频 第五讲【】mongodb 视频 第六讲【】mongodb 视频 第...

    mongodb8-17集含代码 09第五讲上.avi

    mongodb8-17集含代码 09第五讲上.avi

    mongodb8-17集含代码 10第五讲下.avi

    mongodb8-17集含代码 10第五讲下.avi

    最新数据库系统概论(新技术篇)

    第5讲 新一代OLAP分析 第6讲 数据挖掘 第7讲 数据库安全性新技术 第8讲 开源数据库系统 第9讲 理解大数据 第10讲 大数据思维和方法 第11讲 大数据处理平台Hadoop&Spark;及其生态系统 第12讲 SQL on Hadoop Systems ...

    网络架构师148讲视频课程

    java架构师148讲视频教程 │ ├─1-148视频教程 │ 第01节:整体课程概览.flv │ 第02节:分模块、分工程管理.avi │ 第03节:多模块多Web应用合并War包.avi │ 第04节:Git基本原理和安装配置使用.avi │ 第05节...

    无服务器数据库架构介绍.docx

    MongoDB 无服务器数据库架构介绍全文共6页,当前为第4页。无服务器数据库架构介绍全文共6页,当前为第4页。MongoDB虽然不是一个无服务器数据库,但是我们还是要提一下,因为它也有一个数据库即服务(Database as a ...

    node.js面试题大全-侧重后端应用与对Node核心的理解

    许多文章在讲第三方类库,可是这些库质量差距较大,一旦遇到问题怎么办 必需的,全面了解node核心才能成为一名合格的node开发人员 目标与原则 前后端兼顾,更侧重后端 理论实战兼顾,侧重考察对实战中应用较多的...

    最近很火的分布式数据库 RethinkDB.zip

    如果高要求的书写可用性对你来讲很重要,那你也不要纠结了,像Riak这样的Dynamo式系统可能更适合你。想要更多地学习RethinkDB?阅读 ten-minute guide 开始学习RethinkDB。对于熟悉分布式系统的程序员可以直接阅读 ...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part2

    第5 章 Spring Boot 基础 122 5.1 Spring Boot 概述 122 5.1.1 什么是Spring Boot 122 5.1.2 Spring Boot 核心功能 122 5.1.3 Spring Boot 的优缺点 124 5.1.4 关于本书的Spring Boot 版本 124 5.2 Spring Boot 快速...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    第5 章 Spring Boot 基础 122 5.1 Spring Boot 概述 122 5.1.1 什么是Spring Boot 122 5.1.2 Spring Boot 核心功能 122 5.1.3 Spring Boot 的优缺点 124 5.1.4 关于本书的Spring Boot 版本 124 5.2 Spring Boot 快速...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    第5 章 Spring Boot 基础 122 5.1 Spring Boot 概述 122 5.1.1 什么是Spring Boot 122 5.1.2 Spring Boot 核心功能 122 5.1.3 Spring Boot 的优缺点 124 5.1.4 关于本书的Spring Boot 版本 124 5.2 Spring Boot 快速...

    python数据分析随书代码

    第5章 数据的检索、加工与存储 110 5.1 利用NumPy和pandas对CSV文件进行写操作 110 5.2 NumPy.npy与pandas DataFrame 112 5.3 使用PyTables存储数据 115 5.4 Pandas DataFrame与HDF5仓库之间的读写操作 118 5.5...

    JavaEE开发的颠覆者+Spring+Boot实战++完整版

    72 第三部分 实战Spring Boot 第5 章 Spring Boot 基础 .... ......................... 122 第6 章 Spring Boot 核心 .... ......................... 138 X ∣ Java EE 开发的颠覆者:Spring Boot 实战 第7 章 ...

    nodejs开发微博实例

    然后选择了另外一本教材《nodejs开发指南》,由于看过了《深入浅出nodejs》,直接跳过了这本书的前几章,写起了该书第五章的微博实例。作为一个新手,在写的过程中,才逐渐发现因为express版本升级的原因,书中的...

    Python入门网络爬虫之精华版

    我们可以选择存入文本文件,也可以选择存入MySQL或MongoDB数据库等。 存储有两个需要注意的问题: 如何进行网页去重? 内容以什么形式存储? Scrapy Scrapy是一个基于Twisted的开源的Python爬虫框架,在工业中...

Global site tag (gtag.js) - Google Analytics