一、count、distinct与group

1、count函数:查询文档数,如下图:

2、distinct:去重,用法:db.runCommand({distinct:"集合名", key:"查询的键"}),如下图:

3、group:分组,语法如下:首先会按照key指定的键进行分组,每组的每一个文档都要执行$reduce指定的方法,该方法接收2个参数,一个是组内本条文档,一个是累加器数据。

  1. db.runCommand({group:{
  2. ns: 集合名,
  3. key: 分组的键,
  4. initial: 初始化累加器,
  5. $reduce: 组分解器,
  6. condition: 条件,
  7. finalize: 组完成器
  8. }})

比如,查询每个班中年龄大于18岁,得分最高的学生信息,如下图:

而使用finalize组完成器,可以对最终要返回的结果集加以额外的修饰,如下图:

4、用函数格式化分组的键

如下图,最后一条文档不包含class这个键,而有clAss这个键。

在分组时却要把该条文档的clAss这个键当作class键进分组,那么可以使用函数格式化分组的键,如下图:

二、数据库命令操作

1、命令执行器runCommand

之前有说过这个命令,也有使用过。比如删除集合可以使用db.集合名.drop(),而使用该命令执行drop命令也可以删除一个集合:db.runCommand({drop: "集合名"})。

2、查询MongoDB提供的可以供runCommand执行的命令

  • shell中查看:db.listCommands()。
  • 登录数据库服务器web端:http://localhost:28017/_commands。前提是在启动数据库服务时加入了rest参数,如下图:

3、常用命令

  • 查询服务器版本与主机操作系统等信息

  • 查询某个集合的详细信息:

  • 查询操作某个集合的最后一次错误信息:

三、固定集合

1、创建一个空的普通集合:db.createCollection("集合名")

2、创建一个新的固定集合,要求大小是100字节(?),且可以存储5个文档

3、把一个普通集合转换成固定集合

4、固定集合的特性

  • 如果在固定集合文档数达到指定的最大文档数量时继续插入文档,它会删除集合中最后一个文档,然后在该位置插入新的文档。

  • 固定集合的顺序是确定的,所以查询速度是非常块的。

5、反向排序(对于普通集合和固定集合都适用)

当使用find函数查询集合时,如果不指定任何排序规则,默认就是按照插入的顺序进行排序的,等同于使用sort函数,并指定$natural键为1(大于-1的数字即可),如下图:

指定$natural键小于0,就可以按照插入顺序的反向顺序进行排序,如下图:

6、尾部游标

这是个特殊的只能用在固定集合上的游标,它在没有结果的时候也不会自动销毁,而是一直等到结果的到来。shell中不支持,一些高级的驱动才支持。

四、GridFS文件系统

1、GridFS是MongoDB自带的文件系统。

2、上传一个文件到GridFS文件系统中:mongofiles -d 数据库名字 -l "要上传的文件的完整路径名" put "上传后的文件名"。如下图:

然后在mdb数据库中就会多出2个集合,它们存储了GridFS文件系统的所有文件信息,查询这两个集合就能看到上传的那个文件的一些信息,如下图:

3、从GridFS文件系统中下载一个文件到本地:mongofiles -d 数据库名字 -l "将文件保存在本地的完整路径名" get "GridFS文件系统中的文件名",如下图:如果不写-l以及后面的路径参数,则保存到当前位置。

4、查看GridFS文件系统中所有文件:mongofiles -d 数据库名字 list,如下图:

5、删除GridFS文件系统中的某个文件:mongofiles -d 数据库名字 delete "文件名",如下图:

五、服务器端脚本

1、服务器端运行eval,如下图:

2、JavaScript的存储

在数据库服务器端可以保存js变量或者函数到system.js这个特殊集合中,以供全局调用,如下图:当执行eval时就会到system.js集合中查看有没有_id键为age的全局变量,如果找不到在看看age是不是一个已经定义了的局部变量,否则报错。

如果是定义成函数就类似于关系型数据库中的存储过程,如下图:

MongoDB 学习笔记(五):固定集合、GridFS文件系统与服务器端脚本的更多相关文章

  1. Mongodb学习笔记五(C#操作mongodb)

    mongodb c# driver(驱动)介绍 目前基于C#的mongodb驱动有两种,分别是官方驱动(下载地址)和samus驱动(下载地址). 本次我们只演示官方驱动的使用方法. 官方驱动文档查看 ...

  2. MongoDB学习笔记(五) MongoDB文件存取操作

    由于MongoDB的文档结构为BJSON格式(BJSON全称:Binary JSON),而BJSON格式本身就支持保存二进制格式的数据,因此可以把文件的二进制格式的数据直接保存到MongoDB的文档结 ...

  3. MongoDB学习笔记五—查询上

    数据准备 { , "goods_name" : "KD876", "createTime" : ISODate("2016-12- ...

  4. MongoDB学习笔记五:聚合

    『count』count是最简单的聚合工具,返回集合中的文档数量:> db.foo.count()0> db.foo.insert({"x" : 1})> db. ...

  5. 【Linux_Shell 脚本编程学习笔记五、Oracle JDK1.8 安装shell 脚本】

    脚本使用说明: 首先在脚本的同级目录下有个 jdk的安装包 脚本和安装包必须在同级目录下才能够安装(脚本没有优化,还可以使用  wget  从网上下载指定版本的  jdk 安装包) #!/bin/sh ...

  6. MongoDB学习笔记(转)

    MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...

  7. MongoDB学习笔记(二)--Capped集合 && GridFS存储文件

    Capped集合                                                            Capped集合的大小是固定的,如果空间都被用完了,新添加的对象 ...

  8. MongoDB学习笔记(五)--复制集 && sharding分片

    主从复制                                                                                       主从节点开启 主节 ...

  9. MongoDB学习笔记:快速入门

    MongoDB学习笔记:快速入门   一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...

随机推荐

  1. Python之scrapy linkextractors使用错误

    1.环境及版本 python3.7.1+scrapy1.5.1 2.问题及错误代码详情 优先贴上问题代码,如下: import scrapy from scrapy.linkextractors im ...

  2. maven知识总结

    使用maven中的命令运行web项目 以上为web项目的目录结构  必须是maven项目 启动命令行  使用 mvn tomcat:run   敲击回车 访问红框中的地址: 关闭命令行   那么项目就 ...

  3. 0918如何利用jmeter为数据库插入测试数据

    第一 制定测试计划,关于JMETER会通过驱动取操作数据库,因而请在底部路径填写正确. 下载该资源http://download.csdn.net/download/fnngj/3451945 第二步 ...

  4. [bzoj3943][Usaco2015 Feb]SuperBull_Kruskal

    SuperBull bzoj-3943 Usaco-2015 Feb 题目大意:贝西和她的朋友们在参加一年一度的“犇”(足)球锦标赛.FJ的任务是让这场锦标赛尽可能地好看.一共有N支球队参加这场比赛, ...

  5. Spring Boot奇怪的问题:The Bean Validation API is on the classpath but no implementation could be found

    注意:此方法不能解决在项目上用了Hibernate Validator的问题. 错误如下: *************************** APPLICATION FAILED TO STAR ...

  6. CentOS 6.9使用sudo时出现:“...不在 sudoers 文件中,此事将被报告”的问题解决

    在终端切换root账号登录 su 修改/etc/sudoers文件 visudo 找到:root ALL=(ALL) ALL,修改成自己的账号: 保存即可,按Exc,输入”:wq!“,回车.

  7. 歌乐电子一道非常easy的笔试题目居然搞错了!!!

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjI0NzQ2Mg==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...

  8. 高速学会Mac上托管代码到github(具体解释)

    之前最開始的时候就一直在github浏览下载各种代码,然后弄了一下代码上传不知道咋弄就不了了之了.刚好近期有空余时间就研究了下github托管代码,这里就具体说说怎样高速的学会github上传你的代码 ...

  9. [NodeJS]使用Node.js写一个简单的在线聊天室

    声明:教程来自<Node即学即用>.源代码案例均出自此书.博文仅为个人学习笔记. 第一步:创建一个聊天server. 首先,我们先来写一个Server: var net = require ...

  10. TestNG升级

    TestNG 6.5.1 or above is required,please update your TestNG or uncheck 'Use project TestNG jar' from ...