7 MongoDB进阶指南
来源:互联网 发布:windows 加密文件系统 编辑:程序博客网 时间:2024/05/20 17:40
数据库命令
命令的工作原理
Drop命令可以在shell中删除一个集合。比如db.coll.drop()。同理也可以用runCommand来达到一样的效果。
>db.runCommand({"drop":"coll"})
命令参考
MongoDB支持超过75个命令,我们可以在shell中运行:db.listCommands()或者从驱动程序中运行等价的命令list-commands。
浏览器管理员接口:http://localhost:28017/_commands
常用的一些命令,执行用>db.runCommand({"xxx":"xx"})
buildInfo:管理专用命令,返回MongoDB服务器的版本号和主机等
{"buildinfo":1}
collStats:返回指定集合的统计信息
{"collStats":"coll"}
distinct:返回指定集合中满足条件的文档的指定键的所有不同值
{"distinct":"coll","key":"key","query":"query"}
drop:删除集合的所有数据
{"drop":"coll"}
dropDatabase:删除当前数据库的所有数据
{"dropDatabase":1}
dropIndexes:删除集合里面名称为name的索引,如果名称为*,则代表删除全部。
{"dropIndexes":"coll","index":"name"}
findAndModify
getLastError:查看对本集合执行的最后一次操作的信息。在w台服务器复制集合的最后操作之前,这个命令会阻塞(超时的毫秒数)
{"getLastError":1
isMaster:检查本服务器是主服务器还是从服务器
{"isMaster":1}
ListCommands:返回所有可以在服务器上运行的命令及相关信息
{"ListCommands":1}
listDatabases:管理专用命令,列出服务器上所有的数据库
{"listDatabases":1}
ping:检查服务器连接是否正常。
{"ping":1}
renameCollection:将集合a重命名为b,其中a和b都必须是完整的集合命名空间(例如"foo.bar"表示foo数据库中的bar集合)
{"renameCollection":a,"to":b}
repairDatabase:修复并压缩当前数据库
{"repairDatabase":1}
serverStatus:返回服务器的管理统计信息
{"serverStatus":1}
创建固定集合
固定集合是一个大小固定的集合,很像环形队列,如果空间不足,最早的文档会被删除,为新的文档腾出空间。
不像普通集合,固定集合需要在使用前显示的创建。使用createCollection命令创建。
>db.createCollection("my_coll":{capped:true,size:100000,max:100})
创建了一个my_coll固定集合,大小100000字节,文档数量上限100个。
我们可以转换已有的普通集合的方式来创建固定集合。使用convertToCapped命令来完成。
>db.runCommand({"convertToCapped":"test",size:100000})
自然排序
固定集合有种特殊的排序方法,是自然排序。自然排序就是文档在磁盘上的顺序。因为固定集合的文档总是按照插入顺序存储的,自然排序就与此相同。
{"$natural":1}排序表示与默认的排序一样,非固定集合用自然排序的意义不大。
如:
尾部游标
尾部游标是一种特殊的持久游标,这类游标会不断的获取最新结果,是受linux中tail
$cursor
While(true){
If(
If(
Break;
}
Sleep(1);
}else{
While(
Do_stuff($cursor->getNext());
}
}
}
GridFS存储文件
开始使用GridFS:mongofiles
Mongofiles内置在MongoDB发布版汇总,可以用来在GridFS中上传,下载,列示,查找或删除文件。像执行其他命令行工具一样,执行mongofiles
现在我们向GridFS上传文件,列出文件和下载文件。
$
$
$
$
$
$ cat
$
$
内部原理
GridFS的块有个单独的集合,默认情况下,都会使用fs.chunks集合,结构如下:
_id#块的唯一键
n #块编号,也就是这个块在原文件中的编号
data #包含组成文件块的二进制数据
files_id #包含这个块原数据的文件文档
文件的原数据都放在另一个集合中,fs.files里面。结构如下:
_id #文件的唯一id,对应files_id
length #文件内容的字节数
chunkSize #每块的大小,以字节为单位,默认是256K
updateDate #文件存入GridFS的时间戳
md5 #文件内容的md5校验和,由服务器端生成
在这里需要提一下md5,它是用于计算上传块的md5校验和,也就意味着用户可以检验md5键的这个值,确保文件正确的上传。
例如:我们可以使用distinct命令获取GridFS中不重复的文件名列表。
>db.fs.files.distinct("filename")
服务器端脚本
db.eval
在服务器端可以使用db.eval函数执行javascript脚本。这个函数先将给定的javascript字符串传给MongoDB,然后返回结果。
发送代码有两种选择,或者封装进一个函数,或者不封装。下面代码是等价的。
>db.eval_r("return
>db.eval_r("function(){return
只有传递参数需要封装成一个函数,参数通过db.eval的第二个参数传递,不过要写成一个数据的形式。例如传递给函数username。
>db.eval_r("function(u){print('hello'+
有必要的话,可以传递多个参数,例如要计算3个数之和。
>db.eval_r("function(x,y,z){return
存储Javascript
每个MongoDB的数据库中都有个特殊的集合,叫做system.js,用来存放Javascript变量。这些变量可以在任何MongoDB的javascript上下文中调用,包括$where字句,db.eval调用,MapReduce作业。用insert可以将变量加入到system.js之中。
>db.system.js.insert({"_id":"x","value":1})
System.js还可以存入Javascript代码。如用javascript写一个日志函数,将其放在system.js中。
>db.system.js.insert({"_id":"log","value":function(msg,level){
Var
level
Var
Print(now
}})
现在我们可以调用这个函数:
>db.eval_r("x='aaa';log('x
安全性
为了避免注射漏洞,我们需要限定作用域。在PHP中代码如下:
$func=new
print('hello,'
}",array("username"
数据库引用
MongoDB最鲜为人知的功能就是数据库引用,也叫DBRef。DBRef就像Url,唯一确定一个到文档的引用。它加载的方式如同浏览器加载url一样。
DBRef是个内嵌文档,下面有几个是DBRef的必选键,注意必须建的顺序不能改变。
{"$ref":"coll","$id":id_value}
$ref #指定集合
$id #指定文档的
如果想用另外一个数据的文档,还有个$db键
{"$ref":"coll","$id":id_value,"$db":database}
事例模式:
我们使用DBRef跨集合引用文档。本例中含有两个集合users和notes。
- 7 MongoDB进阶指南
- MongoDB与PHP -- 进阶指南
- 《MongoDB权威指南》学习整理----MongoDB进阶指南
- 学习MongoDB--(7-1):进阶指南(数据库命令 & 固定集合)
- 学习MongoDB--(7-2):进阶指南(GridFS & 服务器端脚本 & 数据库引用)
- MongoDB权威指南-第7章
- 六、MongoDB 进阶
- MongoDB进阶-索引
- MongoDB 进阶模式设计
- MongoDB 进阶(GridFS)
- MongoDB 进阶模式设计
- Mongodb高级进阶 MapReduce
- MongoDB 进阶模式设计
- mongoDB的进阶学习
- MongoDB 进阶模式设计
- MongoDB配置--docker进阶
- 开发人员进阶指南..........
- 构图进阶指南
- mongodb 5 索引
- COM理解
- 使用vba进行Word文档的数学格式设置
- Squid普通代理设置
- 6 聚合
- 7 MongoDB进阶指南
- 8 MongoDB的管理
- 9 MongoDB主从复制和集群
- QT中的SOCKET编程
- 10 MongoDB分片
- PHP5.3 下安装ZendGuardLoader及ea…
- jQuery插件-轻量弹出层-UIDialog
- Ubuntu下安装MongoDB
- mongod 修复 Mon Mar 317:46:37