MongoDB-入门

MongoDB入门

1、基本概念

Name Descripe
文档 文档是 MongoDB 中数据的基本单位,是一组有序键值集合。类似于关系数据库中的一行行数据。通常以键—值对的形式存在于数据库中。一般情况键是字符串类型,区分大小写并且不能包含重复的键(唯一性)。
集合 集合是一组MongoDB文档的组合,类似于关系型数据库(例如 MySQL)中的数据表。集合没有固定的结构,可以插入不同格式或类型的数据。
数据库 MongoDB使用数据库对集合进行分组。一个MongoDB实例可以承载多个数据库,每个数据库有零个或多个集合。

2、数据类型

数据类型 描述
String 字符串类型,是最常用的数据类型,不过在 MongoDB 中,只有 UTF-8 编码的字符串才是合法的
Integer 整型,用于存储数值。根据您使用服务器的不同,整型可以分为 32 位或 64 位两种
Boolean 布尔型,用于存储布尔类型的值(true/false)
Double 双精度浮点型,用于存储浮点型(小数)数据
Min/Max keys 将一个值与 BSON 元素的最低值和最高值相对比
Array 数组类型,用于将数组、列表或多个值存储在一个键中
Timestamp 时间戳,记录文档修改或添加的具体时间
Object 用于内嵌文档
Null 用于创建空值
Symbol 符号,该数据类型于字符串类型类似,不同的是,它一般用于采用特殊符号类型的语言
Date 日期时间,用 UNIX 时间格式来存储当前日期或时间,您可以创建 Date 对象并将 date、month、year 的值传递给 Date 对象来指定自己的日期时间
Object ID 对象 ID,用于创建文档的 ID
Binary Data 二进制数据,用于存储二进制数据
Code 代码类型,用于在文档中存储 JavaScript 代码
Regular expression 正则表达式类型,用于存储正则表达式

Object ID

Object ID 类似于关系型数据库中的主键 ID,在 MongoDB 中 Object ID 由 12 字节的字符组成,其中:

  • 前 4 个字节表示当前的 Unix 时间戳;
  • 之后的 3 个字节是当前设备的机器标识码;
  • 再之后的 2 个字节是 MongoDB 服务器的进程 id;
  • 最后 3 个字节为计数器,计数器的起始值随机获得。
601e2b6b aa203c c89f 2d31aa
  ↑      ↑     ↑     ↑
时间戳  机器码 进程id 计数器

Timestamp

Timestamps(时间戳)类型用来在 MongoDB 的内部使用,与 Date 类型不同,Timestamps 由一个 64 位的值构成,其中:

  • 前 32 位是一个 Unix 时间戳(由 Unix 纪元(1970.1.1)开始到现在经过的秒数);
  • 后 32 位是一秒内的操作序数。

在一个 MongoDB 实例中,时间戳是唯一的,而且主要在 MongoDB 内部使用,在应用开发中,您可以使用 Date 类型来定义时间日期。

Date

Date 类型是一个 64 位的对象,其中存放了从 Unix 纪元(1970.1.1)开始到现在经历的毫秒数,Date 类型是有符号的,负值则表示 1970.1.1 之前的时间。

3、创建数据库

在MongoDB中使用use命令来创建数据库,如果该数据库不存在,则会创建一个新的数据库,如果该数据库已经存在,则将切换到该数据库。使用use命令创建数据库的语法格式如下:

use database_name;

例如,创建一个名字为mg_pp的数据库,使用如下命令:

use mg_pp;
# 出现如下语句,说明数据库创建成功
switched to db mg_pp

数据库创建成功后,您可以使用db命令来查看当前选择的数据库,如下所示:

db;
# 输入db会显示当前选择的数据库
mg_pp

显示MongoDB中所有的数据库,使用如下命令:

show dbs;
# 这个命令只会显示MGDB中所有不为空的数据库,新创建的数据库中没有数据,故不显示

这个时候就需要向新创建的数据库中插入数据:

db.users.insertOne({ username : "panpan" , password : "123123"});
# 其中users是集合,类似于关系型数据库中的表
# 插入的json字符串,即是文档,对应关系型数据库表中的一行记录

插入数据之后,当我们再次执行show dbs;就会发现我们新创建的数据库了。

[
  {
    "empty": false,
    "name": "admin",
    "sizeOnDisk": 151552
  },
  {
    "empty": false,
    "name": "config",
    "sizeOnDisk": 110592
  },
  {
    "empty": false,
    "name": "local",
    "sizeOnDisk": 73728
  },
  # 这个就是新建的数据库 mg_pp
  {
    "empty": false,
    "name": "mg_pp",
    "sizeOnDisk": 8192
  }
]

4、删除数据库

删除当前数据库的语法格式

db.dropDatabase();

要删除指定的数据库之前,需要先进入该数据库:

use test_delete_db;
# 删除数据库
db.dropDatabase();
# 检查是否删除成功
show dbs;

5、常用命令

5.1、创建集合

MongoDB创建集合(数据表)语句如下:

db.createCollection(name, options);
  • name: 要创建的集合名称;
  • options: 可选参数, 指定有关内存大小及索引的选项,可选值如下表所示:
字段 类型 描述
capped 布尔 (可选)如果为 true,则创建固定集合,固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档,注意:如果该值为 true,则必须指定 size 参数
autoIndexId 布尔 (可选)如为 true,则自动在 _id 字段创建索引,默认为 false,注意:MongoDB 3.2 之后不再支持该参数
size 数值 (可选)为固定集合指定一个最大值,即字节数,如果 capped 为 true,则需要指定该字段
max 数值 (可选)指定固定集合中包含文档的最大数量

使用show collections命令或者show tables命令来查看数据库中的集合

show collections;
show tables;

创建固定集合“mycol”,整个集合空间大小为 102400 KB, 文档最大个数为 1000 个

db.createCollection("mycol", { capped : true, size : 102400, max : 1000 } )

虽然 MongoDB 中提供了单独的创建集合的方法,但通常我们不需要手动创建集合,因为当您在插入文档时,MongoDB 会自动创建集合

5.2、删除集合

删除集合的语法如下:

db.collection_name.drop()

collection_name: 需要删除集合的名称

drop:不需要携带任何参数

5.3、插入文档

使用insert()插入文档:

# 插入一条文档
db.users.insertOne({ username : "panpan" , password : "123123"});
# 批量插入文档
db.users.insertMany([
        { username : "panpan111" , password : "111"},
        { username : "panpan222" , password : "222"}
      ])
# 插入之后使用find()进行查看
db.users.find();

5.4、查询文档

使用find()查询文档,语法如下:

db.collection_name.find(query, projection);
  • query:可选参数,使用查询操作符指定查询条件
  • projection:可选参数,使用投影操作符指定返回的键。查询时若要返回文档中所有键值,只需省略该参数即可(默认省略)

pretty() 方法来格式化查询到的结果:

db.collection_name.find(query, projection).pretty()

findOne()方法只能返回一个查询到的文档:

db.collection_name.findOne(query, projection)

投影操作

db.collection_name.find(query,{key1:1, key2:1, ...})
  • query:可选参数,使用查询操作符指定的查询条件;
  • key1、key2、…:为要查询或者隐藏的字段,当值为 1 时表示显示该字段,值为 0 时表示隐藏该字段。

5.5、更新文档

update() 方法用于更新现有文档中的值,其语法格式如下:

db.collection_name.update(
    <query>,
    <update>,
    {
        upsert: <boolean>,
        multi: <boolean>,
        writeConcern: <document>
    }
)
  • query:update 的查询条件,类似 SQL 中 update 语句内 where 后面的内容;
  • update:update 的对象和一些更新的操作符(如 、 、 inc…)等,也可以理解为 SQL 中 update 语句内 set 后面的内容;
  • upsert:可选参数,默认值为 false,用来定义当要更新的记录不存在时,是否当作新记录插入到集合中,当值为 true 时表示插入,值为 false 时不插入;
  • multi:可选参数,默认值为 false,用来表示只更新找到的第一条记录,当值为 true 时,则把按条件查出来的多条记录全部更新;
  • writeConcern:可选参数,用来定义抛出异常的级别。

save() 方法可以使用传入的文档来替换已有文档,若 _id 主键存在则更新已有文档,若 _id 主键不存在则作为新数据插入到集合中。

语法格式如下:

db.collection_name.save(
    <document>,
    {
        writeConcern: <document>
    }
)
  • document : 文档数据;
  • writeConcern :可选,抛出异常的级别。

5.6、删除文档

delete() 方法从集合中删除文档,语法格式如下:

db.collection_name.delete(
    <query>,
    {
        justOne: <boolean>,
        writeConcern: <document>
    }
)
  • query:可选参数,定义要删除文档的条件;
  • justOne:可选参数,如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档;
  • writeConcern:可选参数,定义抛出异常的级别。

eg:

# 创建一些测试数据

db.course.insertMany([
 {
 title: 'MongoDB教程',
 author: '编程帮',
 url: 'http://www.biancheng.com/mongodb/index.html'
 },{
 title: 'HTML教程',
 author: '编程帮',
 url: 'http://www.biancheng.com/html/index.html'
 },{
 title: 'C#教程',
 author: '编程帮',
 url: 'http://www.biancheng.com/csharp/index.html'
 }
 ])
# 删除title为“MongoDB教程”的文档
db.course.deleteOne({'title':'MongoDB教程'})

你可能感兴趣的:(mongodb,数据库)