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

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

db.listCommands() 列出所有的命令

MongoDB支持固定集合,要事先创建,而且大小固定,固定集合很像环形队列,如果空间不足,最早的文档就会被删除,为新的文档腾出空间。固定集合在默认情况下没有索引,即便是"_id"上也没有索引。

创建固定集合可以使用createCollection来创建

 db.createCollection("my_collection",{capped:true,size:})

可以将普通集合转为固定集合

db.runCommand({"convertToCapped":"my_collection",size:} )

固定集合有种特殊的排序方式即自然排序,自然顺序就是文档在磁盘上的顺序,因为固定集合的文档总是按照插入的顺序存储的,自然顺序就是与此相同。也可以按照反洗插入的顺序查询,如下:

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

使用{"$natural":1}表示与默认顺序相同,非固定集合不能保证文档按照特定顺序存储,所以自然顺序的意义不大。

尾部游标是一种特殊的持久游标,这类游标不会在没有结果后销毁,一旦有新文档添加到集合里就会被取回并输出,尾部游标只能用在固定集合上。【MongoDB shell不支持尾部游标】

GridFS是一种在MongoDB中存储大二进制文件的机制

PS D:\install\MongoDB\Server\3.0> .\bin\mongofiles.exe search foo
--07T13::03.326+ connected to: localhost
PS D:\install\MongoDB\Server\3.0> .\bin\mongofiles.exe put foo.txt
--07T13::17.425+ connected to: localhost
added file: foo.txt
PS D:\install\MongoDB\Server\3.0> .\bin\mongofiles.exe get foo.txt
--07T13::24.541+ connected to: localhost
finished writing to: foo.txt
PS D:\install\MongoDB\Server\3.0> .\bin\mongofiles.exe delete foo.txt
--07T13::33.263+ connected to: localhost
successfully deleted all instances of 'foo.txt' from GridFS

GridFS是一个建立在普通MongoDB文档基础上的轻量级存储规范,MongoDB服务器对GridFS请求没有什么特别照顾,所有相关工作都由客户端驱动或者工具完成。GridFS的一个基本思想就是可以将大文件分成很多小块,每块作为一个单独的文档存储,这样就能存储大文件了,除了存储文件本身的块,还有一个单独文档用来存储块的信息和文件的元数据。

GridFS的块有个单独的集合,默认情况下,块将使用fs.chunks集合

fs.chunks里边的结构如下:

{

"_id" ,块的唯一ID

"n",  块的编号即这个块在原文件中的顺序编号

   "data",包含组成文件块的二进制数据

"files_id"  包含这个块元数据的文件文档的"_id"

}

文件的元数据放在另一个集合中,默认是fs.files,这里边的每个文档代表GridFS中的一个文件,与文件相关的自定义元数据也可以存在其中,除了用户自定义的键,GridFS规范还定义了一些键。

_id 文件唯一id,在块中作为“files_id”键的值存储

length 文件中内容总的字节数

chunkSize 每块的大小,字节为单位,默认256K,必要时可以调整

uploadData 文件存入GridFS的时间戳

md5 文件内容的md5校验和,由服务器端生成

在服务器端可以通过db.eval函数执行JavaScript脚本

> db.eval("return 1;")

> db.eval("function(){return 1;}")

> db.eval("function(a,b){return a+b;}",,)

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

> db.system.js.find()
> db.system.js.insert({"_id":"x","value":})
WriteResult({ "nInserted" : })
> db.system.js.insert({"_id":"y","value":})
WriteResult({ "nInserted" : })
> db.system.js.insert({"_id":"z","value":})
WriteResult({ "nInserted" : })
> db.eval("return x+y+z;") > db.system.js.find()
{ "_id" : "x", "value" : }
{ "_id" : "y", "value" : }
{ "_id" : "z", "value" : }

使用存储的JavaScript缺点就是代码会与常规的源代码控制脱离,会搅乱客户端发送来的JavaScript,最适合使用存储JavaScript的情况就是程序中有多个地方都要用到一个JavaScript函数,将这样的函数放置在中心位置,要是有更新的话就可以不必每处都修改。

DBRef(数据库引用)就像URL,唯一确定一个到文档的引用。

DBRef是个内嵌文档,但是DBRef有些必选键"$ref"、"$id"可选键"$db"

DBRef中键的顺序不能改变,第一个必须是"$ref",接着是"$id",然后是(可选的)"$db"

{"$ref":collection,"$id":id_value,"$db":database}

collection:指向一个集合

id_value:集合里根据"_id"确定唯一的文档

database:数据库

> db.user.find()
> db.users.find()
{ "_id" : "mike", "display_name" : "Mike D" }
{ "_id" : "kristina", "display_name" : "Kristina C" }
> db.nodes.insert({"_id":,"author":"kristina","text":"... and DBRefs are easy,too", "references":[{"$ref":"users","$id
":"mike"}, {"$ref":"nodes","$id":5}]})
WriteResult({ "nInserted" : })
> db.nodes.insert({"_id":,"author":"mike","text":"MongoDB is fun!"})
WriteResult({ "nInserted" : })
> var note=db.nodes.findOne({"_id":})
> note.references.forEach(function(ref){ printjson(db[ref.$ref].findOne({"_id":ref.$id})); })
{ "_id" : "mike", "display_name" : "Mike D" }
{ "_id" : , "author" : "mike", "text" : "MongoDB is fun!" }

MongoDB学习笔记06的更多相关文章

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

    介绍MongoDB支持的一些高级功能: 数据库命令 固定大小的集合 GridFS存储大文件 MongoDB对服务端JavaScript的支持 数据库命令 命令的原理 MongoDB中的命令其实是作为一 ...

  2. MongoDB学习笔记系列

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

  3. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  4. MongoDB 学习笔记(原创)

    MongoDB 学习笔记 mongodb 数据库 nosql 一.数据库的基本概念及操作 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table ...

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

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

  6. MongoDB学习笔记(转)

    MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...

  7. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记

    机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...

  8. 【转】MongoDB学习笔记(查询)

    原文地址 MongoDB学习笔记(查询) 基本查询: 构造查询数据. > db.test.findOne() { "_id" : ObjectId("4fd58ec ...

  9. iOS学习笔记06—Category和Extension

    iOS学习笔记06—Category和Extension 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inher ...

随机推荐

  1. scala中的implict

    1.作为隐式参数 object Test { def main(args: Array[String]) { import FruitColor._ Fruit.get("apple&quo ...

  2. (转).net程序员转战android第一篇---环境部署

    原文,整个序列一样http://www.cnblogs.com/Twmin/p/3148892.html 对于.net开发人员去写java,可谓说是见山是山, 因为太多的相同; 最近段时间因工作因素, ...

  3. NPOI导入导出Excel

    .net mvc利用NPOI导入导出excel 注意:如何导出的提交方式ajax导出是失效的! 解决方案是:js处理l两个表单的提交  代码:  第一步. 在页面里面加入2个隐藏的iframe, 如下 ...

  4. (三)CodeMirror - Event

    "change" (instance: CodeMirror, changeObj: object) { from, // object to, // object text, / ...

  5. 学习CAS实现SSO单点登录

    学习CAS实现SSO单点登录 网上找了几篇比较详细的教程,在这记录一下: 原理: CAS实现SSO单点登录原理 教程: 1.CAS实现单点登录(SSO)经典完整教程 2.SSO之CAS单点登录实例演示 ...

  6. [Database] Deadlock avoidance protocol

    如何避免Deadlock,如果我们能提前知道各个Process对于资源的需求情况,我们就可以用Banker's algorithm (银行家算法) 来解决问题.可是这在现在中不好实现,因为很难提前知道 ...

  7. MDX示例:求解中位数、四分位数(median、quartile)

    一个人力资源咨询集团通过网络爬虫采集手段将多个知名招聘网站上发布的求职和招聘等信息准实时采集到自己的库里,形成一个数据量浩大的招聘信息库,跟踪全国招聘和求职的行业.工种.职位.待遇等信息,并通过商业智 ...

  8. IOS 开发之文件管理

    一.iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立.封闭.安全的空间,叫做沙盒.它一般存放着程序包文件(可执行文件).图片.音频.视频.plist文件.sqlite数据库 ...

  9. android 利用Bitmap获取圆角矩形、圆形图片

    1.在很多时候,我们要显示图片资源,需要将他的资源显示为圆角的:示例源码如下: public static Bitmap getRoundedCornerBitmap(Bitmap bitmap,fl ...

  10. IE10-IE11在NET4.0下出现“__doPostBack未定义”解决方案

    IE10在NET4.0下出现"__doPostBack未定义"的办法 参考文章: http://blogs.msdn.com/b/scott_hanselman/archive/2 ...