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)")
转载于:https://www.cnblogs.com/Jxwz/p/4188342.html
MongoDB学习笔记-06 数据库命令、固定集合、GridFS、javascript脚本相关推荐
- MongoDB学习笔记~对集合属性的操作
$unset清除元素 请注意在单个数组元素上使用$unset的结果可能与你设想的不一样.其结果只是将元素的值设置为null,而非删除整个元素.要想彻底删除某个数组元素,可以用$pull 和$pop操作 ...
- MongoDB学习笔记(四)使用Java进行实时监控与数据收集(空间使用量、连接数)
目录: MongoDB学习笔记(一)环境搭建与常用操作 MongoDB学习笔记(二)使用Java操作MongoDB MongoDB学习笔记(三)使用Spring Data操作MongoDB Mongo ...
- MongoDB 学习笔记八 复制、分片、备份与恢复、监控
MongoDB 学习笔记八 复制.分片.备份与恢复.监控 MongoDB复制(副本集) 什么是复制? MongoDB 复制原理 MongoDB 副本集设置 副本集添加成员 MongoDB 分片 分片 ...
- 非关系型数据库MongoDB学习笔记
MongoDB学习笔记 --周灿 创建数据库 use "databasename" 查看数据库 show dbs 给指定数据库添加集合和插入记录 db.集合名.insert({ ...
- MongoDB学习笔记(入门)
MongoDB学习笔记(入门) 一.文档的注意事项: 1. 键值对是有序的,如:{ "name" : "stephen", "genda" ...
- JavaWeb黑马旅游网-学习笔记06【旅游线路分页展示分页展示】
Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...
- MySQL学习笔记06【多表查询、子查询、多表查询练习】
MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...
- MongoDB学习笔记(一) MongoDB介绍及安装
系列目录 MongoDB学习笔记(一) MongoDB介绍及安装 MongoDB学习笔记(二) 通过samus驱动实现基本数据操作 MongoDB学习笔记(三) 在MVC模式下通过Jq ...
- PHP操作MongoDB学习笔记
PHP操作MongoDB技術總結 <?php /** * PHP操作MongoDB学习笔记 */ //************************* //** 连接MongoDB数据库 ...
最新文章
- css3-11 如何实现2D动画
- Ubuntu中安装Eclipse的SVN插件——subclipse
- mysql里边字符函数_mysql函数(一.字符函数)
- 如何实现红帽企业虚拟化管理平台Host主机所在数据中心的切换
- 洛谷2017-2月月赛
- 零代码、不花钱就能做大屏,这个报表工具帮了大忙
- Linux监控平台(zabbix监控介绍,安装zabbix,解决忘记admin密码)
- Linux线程同步读写锁 rwlock
- oracle 前导列_Oracle数据库表和表列讲解
- Abode Arcobat DC 解决IEEE会议论文审核字体未嵌入和打印PDF掉色问题
- Ubuntu下载软件包网速过慢的解决方法
- 计算机重启打印机无法使用,为什么打印机在电脑重启后就不能用了并且也无法添加?-win7添加打印机...
- 【leetcode-字符串】:重复的子字符串(是否由它的一个子串重复多次构成)
- mysql过载保护_浅谈过载保护
- 【热门】男孩取名:代表希望与志向的男孩名字
- 对学生公寓部建议和意见_部门管理建议和意见 宿舍管理意见和建议
- Gradle构建项目深入浅出
- 计算机化系统知识培训,法规基本知识培训附录9计算机化系统.pptx
- 6大B2C购物系统比较
- 在word中如何美观地插入代码
热门文章
- 七、操作系统——动态分区分配算法(详解)
- LeetCode 1586. 二叉搜索树迭代器 II(数组+栈)
- LeetCode 469. 凸多边形(向量叉积)
- LeetCode 428. 序列化和反序列化 N 叉树(DFS)
- LeetCode 931. 下降路径最小和(动态规划)
- LeetCode677. 键值映射(Trie树)
- c盘清理代码_拒接卡顿,从c盘减负、系统修复及网络加速做起!奥利~~~
- 端口可以随便设置吗_驱动可以随便更新吗?
- mysql获取网站绝对路径_Symfony2获取web目录绝对路径、相对路径、网址的方法
- python暂停和恢复_python – 暂停和恢复QThread