mongoDB 学习笔记(五)数据库命令、固定集合、GridFS文件系统

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:"[email protected]",
	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代码

猜你喜欢

转载自blog.csdn.net/qq_36154832/article/details/88907679