MongoDB学习笔记-06 数据库命令、固定集合、GridFS、javascript脚本

介绍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)")

时间: 2024-10-06 21:07:06

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

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

如何我们要删除一个集合,可以采用db.test.drop()的方式,其实在这背后,这个函数运行的是drop命令.可以用runCommand达到同样的效果. 我们首先新建一个集合作为测试使用: > use maple1 switched to db maple1 > db.maple1.insert({'name':'zhanghongfeng'}) WriteResult({ "nInserted" : 1 }) 删除掉这个集合,反馈的结果中ok:1代表成功 > db

MongoDB学习笔记06

在shell中删除一个集合,执行db.test.drop()或者db.runCommand({"drop":"test"}),在MongoDB中命令其实是作为一种特殊类型的查询来实现的,这些查询针对$cmd集合来执行,runCommand仅仅是接受命令文档,执行等价查询,因此drop调用实际是这样的: db.$cmd.findOne({"drop":"test"}) db.listCommands() 列出所有的命令 Mong

mongodb 学习笔记 06 -- mongod配置文件

笔记01中启动mongod是直接通过命令行指定参数的 mongod --dbpath /path/to/database --logpath /path/to/logfile --fork --port 27017 可以指定配置文件启动 , -f 指定配置文件目录 mongod -f configfile 配置文件格式: mongodb 从 2.6 开始 配置文件的格式改为YAML格式 配置例子: systemLog: destination: file path: "/path/to/logf

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

mongoexport 导出json或者csv格式 mongoimport 导入json或者csv mongodump 导出二进制bson结构数据以及索引信息 mongorestore 导入二进制文件 mongoexport -h 主机 --port 端口号 -u 用户名 -p 密码 -d 库名 -c 表名 -f field1,field..... 导出的字段 -q 查询条件 -o 导出文件名 --csv 等同于 --type=csv 导出csv格式,一定要指定-f 导出字段才能导出csv 例子

MongoDB 学习笔记一 安装以及基础命令

一.MongoDB安装配置 1.获取最新版本: wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.0.2.tgz 2.解压缩即可执行 tar zxvf mongodb-linux-x86_64-2.0.2.tgz tar zxvf mongodb-linux-x86_64-2.0.2.tgz cd /usr/mongodb-linux-x86_64-2.0.2/bin 但是在运行前,需要创建mongodb需要的存放数据和日志的

mongodb学习笔记系列一

一.简介和安装 ./bin/mongod --dbpath /path/to/database --logpath /path/to/log --fork --port 27017 mongodb非常的占磁盘空间, 刚启动后要占3-4G左右,--smallfiles 二.基本命令 1.登录mongodb client /use/local/mongo 2.查看当前数据库 show databases; show dbs; 两个可能 3.admin是和管理有关的库,local 是放schema有关

Android开发学习笔记:数据存取之SQLite浅析

一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java.C++..Net等,还有ODBC接口,同样比起 Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的

MongoDB学习笔记一 ID自增长

以下是官网原文地址: http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/ 概要 MongoDB 的_id字段作为一个主键存在于所有文档的最顶层,_id必须是唯一的,而且总是具有唯一约束的索引.除了唯一约束,你可以在集合中的_id字段上使用任何值, 以下这个指南描述了在_id上创建一个自增序列的两种方式: Use Counter Collection Optimistic Loop 注意事项 一般情况

MongoDB 学习笔记(一)基础篇

1.MongoDB 特点 面向集合存储,存储对象类型的数据方便 模式自由,不需要定义任何模式(schma) 动态查询 完全索引,包含内部对象 复制和故障恢复方便 高效的二进制数据存储 支持c# 平台驱动 2.体系结构 一台服务器可以创建多个Server 实例和数据库,(推荐一天server 机器创建一个实例), 数据库:MongoDB 中的一系列与磁盘有关的物理文件(数据文件,日志文件等). 数据逻辑结构:文档 (documnet) 集合(collection) 数据库(database). d