MongoDB使用学习(一)-基础知识

来源:互联网 发布:冰与火之歌结局 知乎 编辑:程序博客网 时间:2024/06/05 03:32

。 学习了MySQL之后,出于兴趣决定学习一下noSQL数据库的使用,在noSQL数据库之中MongoDB算是比较知名的了。
与关系型数据库相比,MongoDB中数据的核心概念不再是表中的记录,而是键值对构成的文档,有点类似于python中的字典的数据结构。如{“greeting”:”Hello World”}。文档就是键值对的一个有序集与关系型数据库相比,面向文档的数据库通过在文档中嵌入文档和数组,能够仅使用一条记录来表现复杂的层次关系,能够获得更好的扩展性。这与使用现代面向对象语言的开发者对数据的看法是一致的。
文档中的键值对有一些特别的规范。主要有:
1、文档的键值不能重复,如下面的文档即是非法的。
{“greeting”:”Hello World”,”greeting”:”Helllo MongoDB”}
2、文档的键值是区分大小写的,下面两个文档是不同的。
{“foo”:”hello”}{“Foo”:”hello”}
3、MongoDB支持多种数据类型作为文档中的值。

  • null ,null用于表示空值或不存在的字段:{“x”:null}
  • 布尔型 ,即true和false
  • 数值,mongo shell默认使用的是64位浮点型数值,对于整型值,可以使用NumberInt类(表示4字节带符号整数)或NumberLong(表示8字节带符号整数)类
  • 字符串,UTF-8字符串都可以表示为字符串类型的数据。
  • 日期,如{“x”:new Date()}
  • 正则表达式,主要可用于查询时的限定条件
  • 数组,如{“x”:[“1”,2,3]},数组可以包含不同类型的数据,它既能作为有序对象如列表,栈或队列使用,也可以作为无序对象如数据集使用。
  • 内嵌文档,在文档中可以嵌套其他文档,如{“foo”:{“name”:”shihao”}
  • 对象ID,对象ID是一个12字节的ID,为文档唯一标识。MongoDB中的文档必须有一个”_id”键,该键的值可以为任意类型,默认是ObjectID对象,如果插入文档时没有插入”_id”键,系统会自动创建一个
  • 二进制数据,它不能直接在shell中使用,但在将非UTF-8字符串保存到内存中时,二进制数据是唯一的方式。
  • 代码,这一点足够惊奇吧,查询和文档中可以包含任意js的代码,真的是让前端开发工程师们看着就爽啊,如{“x”:function(){}}

对应于关系型数据库中的表结构,MongoDB数据库中的集合就相当于一张表,集合是动态模式的,表示集合中的文档可以是不同类型的。如
{“foo”:”shihao”}{“number”:3},尽管可以这样操作,但将各种不同类型的文档放在同一个集合中管理和查询的效率是很低的,在一个集合中只放一种类型的文档可以更加有效的堆积和进行索引。
集合的命名规则:

  • 集合名不能是空字符串(“”)
  • 集合名不能包含\0字符,这个字符表示集合名的结束
  • 集合名不能以”system.”开头,这是为系统集合保留的前缀。例如system.users保存着数据库的用户的用户信息。
  • 用户创建的集合不能在集合名包含保留字符’$’。

此外,使用子集合可以使数据结构更加清晰。
在MongoDB中,多个文档组成集合,多个集合构成数据库,一个MongoDB实例可以承载多个数据库,每个数据库拥有0个或多个集合,有多个应用程序时,就需要使用多个不同的数据库。数据库也是采用名称来标识。数据库名需满足以下条件:

  • 不能是空字符(“”)
  • 不得含有/、\、.、”、*、<、>、:、|、?、$、\0。基本上只能使用ASCII中的字母和数字。
  • 数据库名区分大小写
  • 数据库名最多可达到64字节,不过我想一般也不会有谁会搞那么长的命名吧。

数据库最终会变成文件系统中的文件,数据库名即为文件名。

0 0
原创粉丝点击