MongoDB(一)


一、MongoDB简介

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似jsonbson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引

二、MongoDB特点

1、其主要场景如下:

1)网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。

2)缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。

3)高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持。

2、不适用的场景如下:

1)要求高度事务性的系统。

2)传统的商业智能应用。

3)复杂的跨文档(表)级联查询。


三、基本概念

MongoDB中基本的概念是文档、集合、数据库,下表可以帮助更容易的理解MongoDB的概念:

关系型数据库

MongoDB

数据库

数据库

集合

文档

字段

Join

内嵌文档

主键

主键,MongoDB自动将_id字段设置为主键

(一)文档

文档相当于关系型数据库中的行。它一组键值对,具有动态的模式,所以文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这一点,跟关系型数据库有很大的不同。

注:

  1. 文档中的键/值对是有序的。

  2. MongoDB区分类型和大小写。

  3. MongoDB的文档不能有重复的键。

  4. 键不能含有 (空字符)

  5. .$有特别的意义,只有在特定环境下才能使用。

(二)集合

集合相当于关系型数据库中的表。集合就是一组MongoDB文档。集合存在于数据库中,集合没有固定的结构,这意味着可以对集合插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

注:

  1. 集合名不能是空字符串""

  2. 集合名不能含有字符(空字符),这个字符表示集合名的结尾。

  3. 集合名不能以"system."开头,这是为系统集合保留的前缀。

  4. 集合名用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$

(三)数据库

数据库是集合的实际容器。每一数据库都在文件系统中有自己的一组文件。一个 MongoDB 服务器通常有多个数据库。

注:

  1. 不能是空字符串("")

  2. 不得含有' '(空格).$/ (空宇符)

  3. 应全部小写。

  4. 最多64字节。

四、数据类型

Object ID 文档的id

String: 字符串,最常用,必须是utf-8

Boolean:布尔值,true 或者false

Integer:整数

Double:浮点数

Arrays:数组或者列表,多个值存储到一个键

Object:用于嵌入文档,即一个值为一个文档

Null:存储null

Timestamp:时间戳

Date:存储当前日期或时间unix时间格式



Object ID

  每个文档都有一个属性,为_id保证文档的唯一性;

  可以自己去设置_id插入文档

  如果自己没设置,mongoDB为每个文档提供一个独特的_id ,是一个12字节十六进制数

      前4个字节为当前时间戳

      接下来的3个字节为机器ID

      接下来2个字节为mongo的服务进程ID

      最后3个是简单的增量值

五、基本操作

1、创建数据库:

use <数据库名>

如果数据库不存在,则创建数据库,否则切换到指定数据库

2查看数据库

show dbs

3创建集合

db.createCollection("集合名")

4删除集合

1show collections 查看当前数据库所有集合

2db.集合名.drop()

5插入文档数据

db.集合名.insert(文档内容)

6更新文档

            db.集合名.update(
                <query>,
                <update>,
                  {
                     upsert: <boolean>,
                     multi: <boolean>,
                     writeConcern: <document>
                  }
              )

参数说明:

query : update的查询条件,类似sql update查询内where后面的。

update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

writeConcern :可选,抛出异常的级别。

7删除文档

              db.collection.remove(
                   <query>,
                   <justOne>
                )

参数说明:

  • query:(可选)删除的文档的条件。

  • justOne: (可选)如果设为 true 1,则只删除一个文档。

  • writeConcern:(可选)抛出异常的级别。

8、查询文档

db.collection.find(query, projection)



参数说明:

query :可选,使用查询操作符指定查询条件

projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

>db.col.find().pretty()






原文地址:https://www.cnblogs.com/lone5wolf/p/10915334.html