这是我摘抄对mongodb的介绍:
对于大数据量、高并发、弱事务的互联网应用,MongoDB则是一个如瑞士军刀般的利剑。--说明了mongodb出现的环境
例如:为了产品中的某个实体的查询操作,我们需要把一个本属于该实体的数据拆分至另一个表中,以便进行连接查询。于是无论是创建,删除还是更新,我们要涉及的操作便增加了许多。更别说互联网项目时刻都在发展和变动,改变一个存储单元结果是常事,至今关系型数据库的在线模式更新依旧不是件简单的事情。--mongodb出现的必要性
选择MongoDB,是因为它的集合支持松散的模式,易于灵活调整;支持复杂的属性,并可为之建立索引,作为查询条件。
MongoDB的系统管理员上辈子是折翼的天使,使他们牺牲自己,方便了整个团队。--mongodb存在的问题
丰富的数据模型
MongoDB是面向文档的数据库,不是关系型数据库。放弃关系模型的主要原因就是为了获得更加方便的扩展性,当然还有其他的好处。
基本的思路就是讲原来的行(row)的概念转换成为了更加灵活的文档模型。
MongoDB没有模型,文档的键是不会事先定义也不会固定不变。
文档是MongoDB的核心概念,多个键及其关联的值有序的放置在一起便是文档。
集合就是一组文档。如果说MongoDB中的文档类似于关系型数据库中的行,那么集合就如同表。
子集合是用“.”字符分开的按命名空间划分的子集合。
MongoDB中多个文档组成集合,同样多个集合可以组成数据库。一个MongoDB实例可以承载多个数据库,它们之间可视为完全独立的。每一个数据库都有独立的权限控制,即便是在磁盘上面。要记住一点:数据库名最终会变成文件系统里的文件,这也就是有如此多限制的原因。
特殊的几个数据库的名是保留的
admin local config
命名空间:将数据库的名字放在集合名前面,得到就是集合的完全限定名。但是字节的长度不能超过121字节。
Mongo启动
mongod在没有参数的情况下会使用默认数据目录/data/db,并使用27017端口,如果数据目录不存在或者不可写,服务器会启动失败。
mongod还会启动一个非常基本的HTTP服务器,监听数字比主端口号高1000的端口,也就是28017端口。这意味着你可以通过浏览器访问http://localhost:28017来获取数据库的管理信息。
MongoDB shell 可以能运行任意javascript程序,而且shell的真正威力还在于它是一个独立的MongoDB客户端。开启的时候,shell会连到MongoDB服务器的test数据库,并将这个数据库连接赋值给全局变量db。这个变量是通过shell访问MongoDB的主要入口点。
shell的基本操作
CRUD
1、创建
insert函数添加一个文档到集合里面。
2、读取
find会返回集合里面所有的文档,若只是想查看一个文档,可以用findOne
find 和findOne 可以接收查询文档形式的限定条件。这将通过查询限制匹配的文档,使用find时,shell自动显示最多20个匹配的文档,但可以获取更多的文档。
3、更新
update接受(至少)两个参数:第一个是要更新文档的限定条件,第二个是新的文档。
4、删除
remove()用来从数据库中永安性删除文档。在不使用参数进行调用的情况下,它会删除一个集合内的所有文档,它也可以接受一个文档以指定限定条件。
蹩脚的集合名
使用db.集合名的方式来访问集合一般不会有问题,但是如果集合名恰好是数据库类的一个属性就有问题了。
基本类型
null 用于表示空值或者不存在的字段
布尔值 两个值‘true’和‘false’
32位整数 shell这个类型不可以用,因为javascript仅支持64位浮点数,所以32位整数会被自动转换
64位整数
64位浮点数
字符串
符号 shell不支持这种类型,shell将数据库里的符号类型转换成字符串
对象id 对象id是文档的12字节的唯一ID
日期 日期类型储存的是从标准纪元开始的毫秒值,不存储时区。
正则表达式
代码
二进制
最大值
最小值
未定义 文档中也可以使用未定义的类型(javascript中的null和underfined是不同的类型)
数组
内嵌文档