MongooooooooooooooooooooDB入门二:基本概念介绍

前言

工欲善其事必先利其器。在学习MongoDB之前,需要对MongoDB的一些基本概念有系统的了解。

所以,本篇文章主要介绍MongoDB的一些基本概念,这些概念的定义均来自《MongoDB权威指南》,关于此书想要了解更多,请点击此处

我尽量使用最简洁的语言来尽可能完整地描述这些基本概念,如有遗漏或不妥之处欢迎指正。

文档

文档是MongoDB的核心概念之一。多个键值对有序地放在一起便是文档。例如:

{"name":"Jerry","score":80}

这个文档有2个键值对,一个是name,其对应的值为"Jerry",另一个是score,其对应的值为“80”。

文档中的键值对是有序的,上面的文档和下面的文档是完全不同的:

{"score":80,"name":"Jerry"}

文档中的值不仅可以是双引号中的字符串,也可以是数值,比如上面文档中的score,还可以是其他几种数据类型,甚至可以是整个嵌入的文档(会在后续文章中介绍)。

MongoDB不单区分类型,也区分大小写,下面2个文档是不同的:

{"score":80}
{"score":"80"}

下面2个文档也是不同的:

{"score":80}
{"Score":80}

另一个需要注意的地方是,文档中的键不能重复,例如下面的文档是不符合规定的:

{"name":"Jerry","score":80,"score":90}

集合

集合也是MongoDB的核心概念之一。集合就是一组文档。如果说文档类似于关系型数据库的记录的话,那集合就类似于关系型数据库的表。

集合中的文档可以是多式多样的,例如下面的2个文档可以同属于一个集合:

{"name":"长安乱","press":"春风文艺出版社","date":"2004-08-01"}
{"author":"韩寒"}

根据文档的概念,我们知道文档中的键是不能重复的,那集合中的文档是否可以重复?

答案是肯定的,集合中可以放置任意的文档,例如下面的集合是完全符合规定的:

{"name":"长安乱","press":"春风文艺出版社","date":"2004-08-01"}
{"name":"长安乱","press":"春风文艺出版社","date":"2004-08-01"}

因为集合中可以放置任意的文档,那随之而来一个问题,还有必要使用多个集合吗?

答案也是肯定的,理由如下:

  • 把各种各样的文档都混在一个集合里面,无论对于开发者还是管理员来说都是噩梦。开发者要么确保每次查
    询只返回需要的文档类型,要么让执行查询的应用程序来从这些文档中筛选出所需要的类型。如果查询书的

    名字还要剔除那些含有作者数据的文档,就很令人恼火。

  • 在一个集合里面查询特定类型的文档在速度上也很不划算,分开做多个集合要快得多。
    从只含书籍信息的集合中查询出几本书,要比从含有书和作者信息的集合中查询消耗更少的磁盘寻道操作。
  • 当创建索引的时候,文档会有附加的结构(尤其是有唯一索引的时候)。索引是按照集合来定义的,把同种类
    型的文档放入同一个集合里面,可以使索引更加有效。

以上3点理由摘自《MongoDB权威指南》,并稍作了修改。

子集合

在集合的命名中引入"."来组织集合是一个惯例,例如blog.posts和blog.authors,posts和authors可以看作blog的子集合,这里blog本身可以是一个集合,也可以根本就不存在。

数据库

MongoDB中多个文档组成集合,同样多个集合可以组成数据库。一个MongoDB实例可以承载多个数据库,它们之间可视为完全独立的。

在对数据库命名的时候,应避免使用以下被保留的数据库名:

  • admin

从权限的角度来看,这是一个“root"数据库。如果将一个用户添加到这个数据库,这个用户就自动继承所有数据库的权限。一些特定的服务器端命也只能从这个数据库运行,比如列出所有的数据库或关闭服务器。

  • local

   这个数据库永远不会被复制,可以用来存储限于本地单台服务器的任意集合。

  • config

   当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

把数据库的名字放到集合名称之前,就得到集合的完全限定名,称为命名空间。例如cms数据库中的集合blog.posts的命名空间为cms.blog.posts。

MongooooooooooooooooooooDB入门二:基本概念介绍,布布扣,bubuko.com

时间: 2024-10-12 04:39:46

MongooooooooooooooooooooDB入门二:基本概念介绍的相关文章

Hadoop 入门二、简要介绍Hadoop的各个主要模块(概念层次)

先从概念层次介绍下Hadoop的各个组件,下一部分会深入Hadoop的每个组件,并从实战层次讲解. 一.Hadoop构造模块 运行Hadoop的意思其实就是运行一组守护进程(daemons),每个进程都有各自的角色,有的仅运行在单个服务器上,有的则运行在集群多个服务器上,它们包括: NameNode Secondary NameNode DataNode JobTracker TaskTracker Hadoop是一个分布式存储与计算系统,分布式存储部分是HDFS,分布式计算部分是MapRedu

Twitter Storm学习之二-基本概念介绍

2.1 Storm基本概念 在运行一个Storm任务之前,需要了解一些概念: Topologies Streams Spouts Bolts Stream groupings Reliability Tasks Workers Configuration Storm集群和Hadoop集群表面上看很类似.但是Hadoop上运行的是MapReduce jobs,而在Storm上运行的是拓扑(topology),这两者之间是非常不一样的.一个关键的区别是: 一个MapReduce job最终会结束,

Shiro权限控制框架入门1:Shiro的认证流程以及基本概念介绍

前言:我在最开始学习Shiro这个框架时,在网上搜索到的一个介绍比较全面的教程是:<跟我学Shiro>系列教程.但是在我看了他写的前几篇文章后,我发现虽然他在这个系列教程中把shiro的一些特性介绍地非常全面详细,但是整个教程的叙述方式还是有很大缺陷的.文章与文章之间并没有很好地串联起来,每篇文章介绍的东西都过于分散了,如果是对shiro完全不了解的新手来看的话完全是一场噩梦.就像一个网友评价的这样: 看了看这个教程,看完之后都想放弃shiro了,完全看不懂,后来百度了很多别的资料才理解了sh

攻城狮在路上(贰) Spring(二)--- Spring IoC概念介绍

一.IoC的概念: IoC(控制反转)是Spring容器的核心.另一种解释是DI(依赖注入),即让调用类对某一个接口的依赖关系由第三方注入,以移除调用类对某一个接口实现类的一览. 定义如此,由此可见,在面向接口编程的情况下,IoC可以很好的实现解耦,可以以配置的方式为程序提供所需要的接口实现类. 在实际程序开发中,我们只需要提供对应的接口及实现类,然后通过Spring的配置文件或者注解完成对依赖类的装配.二.IoC的类型: 1.通过构造函数: 此种方式的缺点是,在构造函数中注入之后一般会作为一个

足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一)

在足球赛事数据库以及统计分析预测平台中,有很多概念,如果不搞懂,很难进行下一步的工作.所以为了配合团队人员的学习和任务进行,特意编写这篇文章.如果有其他问题和不懂的,请留言,将根据情况进行更新. 本文原文地址:足彩基础知识入门(4)赛事数据库与预测平台基础概念介绍(一) 1.指数1/2/3.... 我在 足彩基础知识入门(3)足彩赔率的本质 一文中介绍了赔率的概念,那么指数的概念和赔率以及结果是相关的.我们举个例子: 如上图的比赛,前面是竞彩非让球的赔率:1.74-3.25-4.15,也就是说

Hadoop入门进阶步步高(二)-目录介绍

二.Hadoop目录结构 这里重点介绍几个目录bin.conf及lib目录. 1.$HADOOP_HOME/bin目录 文件名称 说明 hadoop 用于执行hadoop脚本命令,被hadoop-daemon.sh调用执行,也可以单独执行,一切命令的核心 hadoop-config.sh Hadoop的配置文件 hadoop-daemon.sh 通过执行hadoop命令来启动/停止一个守护进程(daemon). 该命令会被bin目录下面所有以"start"或"stop&quo

01-区块链入门之 区块链介绍一-大叔思维

1.区块链技术是什么? 总的来说,区块链是一套协议,一组规范,而不是具体代码.项目. 理解了这套协议,你可以基于现有的技术,以不同的语言去实现它.我们也无法用一句简单的话去概况什么是区块链,站的角度不同,得到的结论也不一样. 金融业: 区块链是一个分布式的账本,是一个分布式的银行记账系统. 密码学者:区块链是使用密码学构建的去信任网络. 码农:区块链就是一个确保最终一致性的分布式数据库. 维基百科:区块链(Blockchain)是一种分布式数据库,起源自比特币.区块链是一串使用密码学方法相关联产

[转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么? http://www.52im.net/thread-1732-1-1.html 1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机网络编程的基础,TCP/UDP收发消息都靠它.我们熟悉的web服务器底层依赖它,我们用到的MySQL关系数据库.Redis内存数据库底层依赖它.我们用微信和别

Linux Capabilities 入门教程:概念篇

原文链接:Linux Capabilities 入门教程:概念篇 Linux 是一种安全的操作系统,它把所有的系统权限都赋予了一个单一的 root 用户,只给普通用户保留有限的权限.root 用户拥有超级管理员权限,可以安装软件.允许某些服务.管理用户等. 作为普通用户,如果想执行某些只有管理员才有权限的操作,以前只有两种办法:一是通过 sudo 提升权限,如果用户很多,配置管理和权限控制会很麻烦:二是通过 SUID(Set User ID on execution)来实现,它可以让普通用户允许