MongoDB学习笔记06

在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:1000})

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

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

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

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

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

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

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

PS D:\install\MongoDB\Server\3.0> .\bin\mongofiles.exe search foo
2015-04-07T13:31:03.326+0800    connected to: localhost
PS D:\install\MongoDB\Server\3.0> .\bin\mongofiles.exe put foo.txt
2015-04-07T13:31:17.425+0800    connected to: localhost
added file: foo.txt
PS D:\install\MongoDB\Server\3.0> .\bin\mongofiles.exe get foo.txt
2015-04-07T13:31:24.541+0800    connected to: localhost
finished writing to: foo.txt
PS D:\install\MongoDB\Server\3.0> .\bin\mongofiles.exe delete foo.txt
2015-04-07T13:31:33.263+0800    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;")
1
> db.eval("function(){return 1;}")
1
> db.eval("function(a,b){return a+b;}",1,2)
3

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

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

使用存储的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":20,"author":"kristina","text":"... and DBRefs are easy,too", "references":[{"$ref":"users","$id
":"mike"}, {"$ref":"nodes","$id":5}]})
WriteResult({ "nInserted" : 1 })
> db.nodes.insert({"_id":5,"author":"mike","text":"MongoDB is fun!"})
WriteResult({ "nInserted" : 1 })
> var note=db.nodes.findOne({"_id":20})
> note.references.forEach(function(ref){  printjson(db[ref.$ref].findOne({"_id":ref.$id})); })
{ "_id" : "mike", "display_name" : "Mike D" }
{ "_id" : 5, "author" : "mike", "text" : "MongoDB is fun!" }
时间: 2024-10-30 03:00:18

MongoDB学习笔记06的相关文章

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学习笔记-06 数据库命令、固定集合、GridFS、javascript脚本

介绍MongoDB支持的一些高级功能: 数据库命令 固定大小的集合 GridFS存储大文件 MongoDB对服务端JavaScript的支持 数据库命令 命令的原理 MongoDB中的命令其实是作为一种特殊类型的查询来实现的,这些查询针对$cmd集合来执行.runCommand仅仅是接受命令文档,执行等价查询. >db.runCommand({"drop":"test"}) 上面的命令等价于下面的查询: >db.$cmd.findOne({"d

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学习笔记系列

回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助和启发,文章中有对新技术的研究(Mongo驱动),对老技术的回顾(代码重构),还有对架构设计的阐述等(面向接口编程,对扩展开放,对修改关闭,所以出现了IMongoRepository接口). MongoDB学习笔记系列~目录 MongoDB学习笔记~环境搭建 (2015-03-30 10:34) M

MongoDB学习笔记一:MongoDB的下载和安装

趁着这几天比较空闲,准备学习一下MongoDB数据库,今天就简单的学习了一些MongoDB的下载和安装,并创建了存储MongoDB的数据仓库.将自己今天学习到的写成博客分享给大家. 一.MongoDB的下载和安装 MongoDB的下载地址为:http://www.mongodb.org/ 1.进入官网的首页后,在首页的右上方单击Downloads连接,如图所示: 2.在页面中可以看到目前最新的版本和以前发布过的版本,这里选择最新版本,windows 32位的进行下载,文件的格式为ZIP格式的,单

MongoDB学习笔记(一:安装时出现The default storage engine 'wiredTiger' is not available问题解决)

今晚在自己老式笔记本来试了一下MongoDB的安装,由于配置比较低,只能选择32位版本的MongoDB进行安装,在安装过程中碰到了上述标题所示错误,自己也捣鼓了一个小时左右,终于在一篇博客中找到答案,具体原文链接如下:http://blog.csdn.net/u013457382/article/details/50775268 MongoDB学习笔记(一:安装时出现The default storage engine 'wiredTiger' is not available问题解决)

Mongodb学习笔记

总结下这几天Mongodb学习笔记 /** * 获取MongoClient * @author xuyw * @email [email protected] * @param host * @param port * @return */ public static MongoClient getMongoClient(String host, int... port) { MongoClient mongoClient = null; int portlen = 0; try { if (p

[Spring Data MongoDB]学习笔记--建立数据库的连接

1. 有了上一篇的Mongo后,连接数据库我们还需要更多的信息,比如数据库名字,用户名和密码等. 我们可以继续来配置MongoDbFactory的实例. public interface MongoDbFactory { DB getDb() throws DataAccessException; DB getDb(String dbName) throws DataAccessException; } 然后我们可以继续用MongoDbFactory来创建MongoTemplate的实例. pu

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有关