《MongoDB权威指南》学习整理----MongoDB简介及基本概念

简介

MongoDB是一种强大、灵活、追求性能、易扩展的数据存储方式。是面向文档的数据库,不是关系型数据库,是NoSQL(not only SQL)的一种。所谓的面向文档,就是将原来关系型数据库中的“行”的概念换成了更加灵活的"文档",以文档为存储单位。文档的值可以是数组、文档等复杂的数据模型。并且文档的键不会事先定义也不会固定不变。mongoDB设计的主要思想之一就是,将能交给客户端的操作都要从服务端转移到客户端,例如生成objectid等操作。mongoDB版本遵从业界普遍规则:偶数为稳定版,奇数为开发版。mongoDB的安装极为简单,下载后,直接解压即可。

功能特点

  • 索引

MangoDB支持通用辅助索引,能进行多种快速查询,提供多种索引能力。

  • 存储JavaScript

MangeDB中可以使用JS代码来起到关系数据库中存储过程的作用。

  • 聚合

MangoDB支持MapReduce和其他聚合工具

  • 固定集合

集合的大小是有上限的

  • 文件存储

MangeDB支持简单的文件存储。

  • 不具备的功能

连接、事务

 

基本概念

文档

文档是MongoDB的核心、基本数据单元,类似于JS中的JSON对象,由多个key-value构成,但是支持更多的数据类型。多个键以及相关的值有序的放置在一起便是文档。在大多数编程语言中都是使用多个key-value的形式,java中是map,Python中是字典,JavaScript中是对象。

  • 文档中的key/value是有序的,没有相同的两个文档。
  • 文档中的value的数据类型没有限制,甚至可以是文档。
  • 文档的key一般应该是字符串。
  • 文档的key不能含有空字符串,不能含有.和$以及_。
  • 文档的key不能重复。
  • mangoDB中,key和value都是区分数据类型和大小写的。

集合

集合就是一组文档,如果说文档类似于关系数据库中的行,那么集合就是表。

集合是无模式的(模式的概念参见模式的意义)。一个集合中的文档可以是任意类型的,也就是说文档是可以任意组合的。

问题:集合存在的意义

  • 虽然集合中可以保存任意类型的文档组合,但是如果不妥善的组织、分类文档的保存,那么不利于数据的分类管理。
  • 在一个存放多种不同类型的集合里面查询特定类型的文档在速度上不划算,最好是每种类型文档分别存在不同的集合中,加快查询速度。
  • 把同类数据放在同一个集合,保证数据聚合性。
  • 同时,同类的文档放在同一集合中可以提高索引的有效性。

集合的命名

  • 和key一样不能有空字符串
  • 不能以"system."开头,不能含有"$"
  • 一个集合的完全限定名:数据库名.集合(子集合)名称,例如cms.blog.posts

子集合

在MangoDB中最常用的组织集合的方式就是子集合,也就是使用:命名空间名.集合名 来定义集合名称,这样做的目的只是为组织结构更好。

集合的访问

访问集合我们一般使用db.集合名的方式,但是当集合的名称恰好是数据库属性名时,这种方式就无法得到集合,只能使用:db.getCollection('集合名')的方式得到集合。同时,由于JS中,x.y等价于x['y'],所以可以用后边一种方式访问数据。

数据库

MangoDB中最基本的存储单元是文档,文档组成集合,集合组成数据库。一个MangoDB实例可以承载多个数据库,数据库之间完全独立。一般情况下,一个应用对应一个数据库,类似于关系数据库中的外模式。

命名

数据库的名称最终会变成系统的文件名称。

  • 不能是空字符串
  • 不得含有空格、点、斜杠与反斜杠以及空字符串。
  • 应该全部小写
  • 最多64字节

系统默认数据库

MangoDB系统中和传统的关系数据库一样都会有一些初始化的数据库保存数据库系统运行信息。

  • Admin

root库。一些特定的服务器端命令只能从这个库运行。

  • Local

local库中的集合永远都不会被复制,用于存储不准备分布式保存的、只保存在本地(单服务器)的集合。

  • Config

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

MongoShell

mongoShell是用于与mongodb交互的工具,类似于navicat、sql/plus等数据库交互工具。所以mongoShell在启动前必须先启动mongodb(使用mongodbHome/bin/mongod启动mongodb实例)。而mongoshell其实就一个强大的javascript解释器(使用mongodbHome/bin/mongo启动mongoshell解释器)。

可以再MongoShell中声明函数、调用JS标准库函数、声明变量等,进行JS开发。

MongoShell中操作的简单说明

创建--insert

语法:数据库.集合.insert(文档)

说明:insert是将某些数据、文档插入到mongodb中,一般是以JS对象或者JS中的表示法来描述对象。

读取--find

语法:数据库.集合.find()/数据库.集合.findOne()

说明:find是将文档从数据库、集合中查找出来,可以接受查询文档形式的限定条件。

更新--update

语法:数据库.集合.update(目标更新文档的限定条件,新的文档)

说明:update用于将mongodb中的某个文档内容更新,接受两个参数,第一个是文档限定对象,第二个是新对象

删除--remove

语法:数据库.集合.remove([文档限定对象])

说明:remove用于删除文档,当remove没有参数的时候删除集合中所有的文档,如果有参数,那么删除参数限定的文档对象。

 

注意事项:

在mongoshell中可以方便的使用help命令来查询或者得到某些命令的使用方法。例如db.foo.update命令,注意该命令update后边没有括号。并且想得到哪个函数的说明,只要该函数没有()就可以查看

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值