介绍MongoDB支持的一些高级功能:

数据库命令

固定大小的集合

GridFS存储大文件

MongoDB对服务端JavaScript的支持

数据库命令

命令的原理

MongoDB中的命令其实是作为一种特殊类型的查询来实现的,这些查询针对$cmd集合来执行。runCommand仅仅是接受命令文档,执行等价查询。

>db.runCommand({"drop":"test"})

上面的命令等价于下面的查询:

>db.$cmd.findOne({"drop":"test"})

当MongoDB服务器得到查询$cmd集合的请求时,会启动一套特殊的逻辑来处理,而不是交给普通的查询代码来执行。

有些 命令的访问需要管理员权限,必须在admin数据库里运行。否则会得到“拒绝访问”的错误。

常见命令列表

可以使用db.listCommand()列出MongoDB支持的所有命令。经常使用的命令如下:

buildInfo:返回MongoDB服务器的版本号和主机的操作系统等信息

>db.runCommand({"buildInfo":1})

collStats:返回指定集合的统计信息,包括数据大小、已分配的存储空间和索引大小。

>db.runCommand({"collStats":"collectionName"})

distinct:返回指定集合中满足查询条件的指定键的所有不同的值

>db.runCommand({"distinct":"collectionName","key":"keyName","query":query})

drop:删除指定集合

>db.runCommand({"drop":"collectionName"})

dropDatabase:删除db指向的数据库,

>db.runCommand({"dropDatabase":1})

dropIndexes:删除集合中指定名称的索引,名称为*时删除全部。

>db.runCommand({"dropIndexes":"collectionName","index":"indexName"})

findAndModify:返回已更新的文档

>db.runCommand({"findAndModify":"collectionName","query":query, "sort":sort, "update":update})

getLastError:返回对本集合执行的最后一次操作的错误信息或者其他状态信息。

>db.runCommand({"getLastError":1})

isMaster:检测本服务器是否为主服务器

>db.runCommand({"isMaster":1})

listCommands:返回所有可以在服务器上运行的命令及相关信息

>db.runCommand({"listCommands":1})

listDatabases:列出服务器上所有的数据库,与show dbs结果类似,管理员专用

>db.runCommand({"listDatabases":1})

ping:检测服务器连接是否正常

>db.runCommand({"ping":1})

renameCollection:重命名集合

>db.runCommand({"renameCollection":a, "to":b})

repairDatabase:修复并压缩当前数据库,db指向的数据库

>db.runCommand({"repairDatabase":1})

serverStatus:返回本服务器的管理统计信息

>db.runCommand({"serverStatus":1})

固定集合

固定集合需要实现创建且大小固定(文档数量、容量)。插入文档时,若还有空间,则在尾部插入,否则最早的文档会被删除。默认情况下,固定集合是没有索引的,即便是”_id”.

1)特点

对固定集合进行插入速度快,插入实际上就是简单的memcpy(内存复制);文档本身按照插入的顺序存储;空间不够时,自动淘汰最早的数据。

2)创建固定集合

固定集合必须在使用前显示创建,使用createCollection()方法来创建:

>db.createCollection("collectionName",{"capped":true,size:10000,max:100})

size:指定集合的存储空间,单位字节

max:指定文档的数量(可选)。

当指定文档数量上限时,必须同时指定大小。淘汰机制只有在容量还没满时才会依据文档数量来工作。要是容量满了,会依据容量来工作。

3)自然排序

自然顺序就是文档在磁盘上的顺序。固定集合的文档总是按照插入的顺序存储的,自然顺序与此相同,也可以使用自然排序按照反方向插入的顺序查询:

>db.my_collection.find().sort({"$natural":-1})

4)尾部游标

尾部游标是一种特殊的持久游标,不会在没有结果后销毁,只能用在固定集合上。

GridFS:存储大文件

GridFS是MongoDB中存储大二进制文件的机制,其特点有如下几方面:

可以简化需求,不需要使用独立文件存储架构;直接利用已经建立的复制或分片机制,便于故障恢复和扩展;避免用于存储用户上传内容的文件系统出现问题;不产生磁盘碎片。

使用GridFS:mongofiles

利用mongofiles应用程序,可以用来在GridFS中上传、下载、列示、查看或删除文件。使用mongofiles --help查看所有选项。

基本用法是:mongofiles [options] command [gridfs filename]

命令有如下选择:list(列示)、search(查看)、put(上传)、get(下载)、delete(删除)

>mongofiles put E:\MongoDB\dbData\UploadTest.txt

>mongofiles list

>mongofiles get E:\MongoDB\dbData\UploadTest.txt

选项有如下的选择:

-h[--host]:指定上传的主机地址,默认localhost

--port:指定上传的端口号,默认27017

-u[--username]:指定用户名

-p[--password]:指定对应的密码

--dbpath:指定数据文件存放路径

-d[--db]:指定使用的数据库

-c[--collection]:指定使用的集合

-l[--local]:上传/下载时的本地文件名,默认与gridfs上的文件名一致

内部原理

GridFS是一个建立在普通MongoDB文档基础上的轻量级文件存储规范。其思想是将大文件分成很多块,每块作为一个单独的文档存储,除了存储文件本身的块,还有一个单独的文档用来存储分块的信息和文件的元数据。

默认情况下,块使用对应数据库(没有指明时是test数据库)的fs.chunks集合。文件的元数据放在fs.files(默认)集合下。


服务器端脚本

在服务端可以通过db.eval()来执行javascript脚本,也可以将javascript脚本保存在数据库中,然后在别的数据库命令中调用。

1)db.eval()

该函数可以在服务端执行任意javascript代码,先将给定的javascript字符串发生给MongoDB,然后返回结果。

>db.eval("return 1;")

参数可以通过eval的第二个参数指定,需写成数组的形式。

>db.eval("function(u){print(’hello,’+u);}",[ "wangdh"])

2)存储javascript

每个数据库都有一个特殊的集合,叫做system.js,用来存放javascript变量,这些变量可以在任何MongoDB的javascript上下文中调用。

>db.system.js.insert({"_id":"username","value":"wangdh"})

system.js还可以用来存放javascript代码

>db.system.js.insert({"_id":"log","value":function(msg,level){

var levels=["DEBUG","WARN","ERROR","FATAL"];

level=level?level:0;

var now=new Date();

print(now+" "+levels[level]+msg);

}})

>db.eval("x=1;log(‘x is ’+x,1)")

MongoDB学习笔记-06 数据库命令、固定集合、GridFS、javascript脚本的更多相关文章

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

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

  2. mongodb学习之:数据库命令以及固定集合

    如何我们要删除一个集合,可以采用db.test.drop()的方式,其实在这背后,这个函数运行的是drop命令.可以用runCommand达到同样的效果. 我们首先新建一个集合作为测试使用: > ...

  3. MongoDB学习笔记06

    在shell中删除一个集合,执行db.test.drop()或者db.runCommand({"drop":"test"}),在MongoDB中命令其实是作为一 ...

  4. mongodb 学习笔记 07 -- 数据备份、恢复

    mongoexport 导出json或者csv格式 mongoimport 导入json或者csv mongodump 导出二进制bson结构数据以及索引信息 mongorestore 导入二进制文件 ...

  5. MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁

    权限                                                                                             绑定内网I ...

  6. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  7. MongoDB学习笔记:MongoDB 数据库的命名、设计规范

    MongoDB学习笔记:MongoDB 数据库的命名.设计规范     第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...

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

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

  9. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

随机推荐

  1. C# lambda

    1. lambda example 1 // Create a basic delegate that squares a number MyDelegate foo = (x) => x * ...

  2. position与z-index的关系

    .simulationgame .gameranking .rankinginfo{ width:140px; margin:0 auto; font-family:Arial, Microsoft ...

  3. [html]LESS-1.3.3

    网站:http://www.bootcss.com/p/lesscss/ 下载链接:http://files.cnblogs.com/files/z5337/less-1.3.3.min.js

  4. 动态调用webservice及WCF服务

    动态调用web服务,该方法只针对Web service, WCF的服务不行,如果是WCF的就通过工具直接生产代理类,把代理类配置到调用的项目中,通过配置客户端的终结点动态的取实现: 通过Svcutil ...

  5. NSBundle常用方法及解释

    1.使用类方法创建一个NSBundler对象+ (NSBundle *)mainBundle;eg:[NSBundle mailBundle];2.使用路径获取一个NSBundle 对象,这个路径应该 ...

  6. WCF账户密码认证

    记录一下我实现WCF用户认证与权限控制的实现方法, 也让其他网友少走一些弯路. 内容写得非常小白(因为我也是小白嘛), 比较详细, 方便WCF知识基础薄的朋友 主要分为下面几个步骤 作为例子, 创建最 ...

  7. Java CopyOnWriteArrayList

    1. 为什么需要 CopyOnWriteArrayList ArrayList 的内部实现是一个数组, 并且是动态扩容的, 当插入数据时, 先判断数组是否需要扩容, 如果需要扩容, 则先扩容, 再插入 ...

  8. Zabbix(二)--第一台主机监控及触发器

    0x01 Create Host 安装完zabbix后从哪里入手?无非就是要添加监控目标,那本文就从添加监控一个主机入手,了解zabbix的各个基本功能 添加主机在“Configuration”选项卡 ...

  9. 安装软件 报错1304 C:\Program Files\Common Files\VMware\VMware VMRC Plug-in\Firefox\dbghelp.dll验证您对该目录具有访问权限

    现在情况是C:\Program Files\Common Files\VMware\VMware VMRC Plug-in\Firefox这个文件夹里面没有dbghelp.dll文件,就需要在百度上面 ...

  10. [LeetCode][Java]Candy@LeetCode

    Candy There are N children standing in a line. Each child is assigned a rating value. You are giving ...