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

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

数据库命令

固定大小的集合

GridFS存储大文件

MongoDB对服务端JavaScript的支持

数据库命令

命令的原理

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

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

clip_image001

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

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

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

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

常见命令列表

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

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

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

clip_image003

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

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

clip_image004

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(默认)集合下。

clip_image006

clip_image007

服务器端脚本

在服务端可以通过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"})

clip_image008

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车与智能家居互联时代 语音控制很关键

来源: I CTA编译:网易智能 nariiy摘要:对于大多数人而言,最昂贵的两个物件是家和汽车。如今,技术将这二者联系在一起,并互为延伸。在不断加速发展的趋势中,智能家居和联网汽车正在融合&#xff…

[问题解决]同时显示多个Notification时PendingIntent的Intent被覆盖?

情况是这样的,使用NotificationManager触发多个Notification: Java代码 private Notification genreNotification(Context context, int icon, String tickerText, String title, String content, Intent intent){ Notification notification new Notifi…

【工业革命】第四次工业革命:自主经济的崛起

来源:产业智能官摘要:数据是新的资源,数据的处理和应用将带动第四次工业革命。随着大数据、云计算、物联网、人工智能、区块链等技术的崛起,很多人都说第四次工业革命即将到来。第四次工业革命到底指的是什么?应该如何…

2019年大数据发展将走向何方

来源:网络大数据近日,包括CCF(中国计算机学会)大数据专家委员会、IDC公司(Internet Data Center 互联网数据中心)和Gartner公司等多家国内外知名信息技术研究机构均发布报告,对2019年乃至未来若干年的大数据产业发展趋势做出预测,…

AI人必看!89页全网最全清华知识图谱报告

来源:智东西摘要:谷歌冲锋,淘宝猛追,这个AI秘密武器强在哪?知识图谱(Knowledge Graph)是人工智能的重要分支技术,它在2012年由谷歌提出,成为建立大规模知识的杀手锏应用&…

人机融合智能的现状与展望

来源:人机与认知实验室作者:刘伟 苌凯旋摘要:本文对人机融合智能的概念、应用、发展将面临的关键问题以及未来发展的方向进行简要介绍。1 引言1.1 现有人工智能的不足与挑战人工智能(AI)的概念于1956年的达特蒙斯学院暑…

Unity自带网络功能——NetworkView组件、Serialize、RPC

Unity拥有大量的第三方插件,专门提供了对网络功能的支持。可是,大部分开发人员第一次接触到的还是Unity自带的网络功能,也就是大家常常说到的Unity Networking API。这些API是借助于组件NetworkView发挥作用的,而它能够简化开发人…

Science:人工智能的发展离不开神经科学,先天结构或是下一个方向

来源:Science编译:机器之心摘要:人工智能从神经科学领域吸收了大量养分,并由此催生了深度学习和强化学习等智能处理方法。以色列魏茨曼科学研究学院计算机科学系教授 Shimon Ullman 相信神经科学还能为人工智能发展提供进一步的助…

Ubuntu20.04 及深度学习环境anaconda、cuda、cudnn、pytorch、paddle2.3安装记录

学习目标: Ubuntu20.04下装好torch、paddle深度学习环境。 选择的版本环境是 :最新的nvidia驱动、cuda 11.1 、cudnn v8.1.1,下面会说为啥这么选。 学习内容: 1. Ubuntu20.04仓库换源 本节参考Ubuntu 20.04 Linux更换源教程 2…

NSIS脚本语言安装与编译

NSIS是什么 当项目中需要把安装包发给客户时,不能直接发送release文件,需要把release文件压缩打包,这时就可以用到NSIS工具,NSIS工具可以进行包装,使用时需要下载: 编译环境:nullsoft scriptab…

AI 的寒冬将来临

来源:云头条深度学习处于所谓的AI革命的前沿至今已有好几年;许多人过去认为,深度学习是神奇的“银弹”,会把我们带到技术奇点(general AI)的奇妙世界。许多公司在2014年、2015年和2016年纷纷下豪赌&#xf…

Libcurl安装与HelloWorld

Windows系统下源代码下载编译、安装方式如下: https://blog.csdn.net/fxbjye/article/details/89152849 编译后得到库文件,把这两个文件复制到项目文件中, 修改项目文件的属性, 修改附加依赖项: 输入代码&#xff1…

信息论之父是如何将世界数字化的?

来源:CSDN编译:弯月机械鼠闯迷宫在 20 世纪 50 年代早期的一段视频中,贝尔实验室的科学家克劳德香农(Claude Shannon)展示了他的一项新发明:一只名为 Theseus 的机械鼠(看起来需要上发条&#x…

奇点、技术失控与技术启示录

来源:资本实验室回顾过去,我们可以看到历史上各个时期涌现出的众多超越时代的新公司、新产品、新思维和新模式。尽管绝大多数创新产品最终都失败了,但先行者们致力于要解决所在时代各种问题和困难的精神,却影响着下一代的技术进步…

Gartner预测2019年十大「数据和分析技术」趋势:增强型分析成为重要卖点

来源:机器之能摘要:处于数据和分析位置的领导人必须审视这些趋势对业务带来的潜在影响,并相应调整业务模式和运营,否则就有可能失去竞争优势。增强型数据分析,增强型数据管理,持续型智能,可解释…

万字长文带你看尽深度学习中的各种卷积网络

来源:AI科技评论摘要:深度学习中的各种卷积网络大家知多少?深度学习中的各种卷积网络大家知多少?对于那些听说过却又对它们没有特别清晰的认识的小伙伴们,这篇文章非常值得一读。Kunlun Bai 是一位人工智能、机器学习、…

Nexus搭建Maven服务器

参考:http://blog.csdn.net/ichsonx/article/details/14642897 1、 为什么使用Nexus 如果没有私服,我们所需的所有构件都需要通过maven的中央仓库和第三方的Maven仓库下载到本地,而一个团队中的所有人都重复的从maven仓库下载构件无疑加大了仓…

通信测试:5G 时代的“卖水人”

来源:中泰证券摘要:“金矿”变成了5G,卖水人的故事已拉开帷幕。前言十八世纪末期,在美国的西进运动中,人们在萨克拉门托河里发现了金砂,工人、农民、海员和传教士,前仆后继前来淘金,…

2019数字化趋势:未来5年政府、零售数字化程度将达80%

来源:阿里云摘要:2月20日,阿里云研究中心发布《2019数字化趋势报告》。报告指出,当前数字化的应用领域正从互联网行业向政府、金融、零售、农业、工业、交通、物流、医疗健康等行业深入。其中,政府、零售业等将成为受云…

量子计算何时具有真正的商业价值?

来源:IEEE电气电子工程师学会我们对新技术的迷恋似乎总是遵循着同样的轨迹:我们时而着迷,时而崇拜,时而失望,时而沮丧,最终得到的满足比我们最初想象的要少。1954年,德州仪器公司宣称其新型晶体…