MongoDB 是一个基于分布式文件存储的数据库, 是一个介于关系数据库和非关系数据库之间的产品,实质上是非关系数据库。
1.下载对应的版本,注意windows兼容的版本,这个一定区分清楚,
下载地址:Download MongoDB Community Server | MongoDB
2.新建data文件夹和文件夹
3.安装
双击:mongodb-win32-x86_64-2008plus-ssl-3.6.23-signed.msi文件开始安装
4.cmd命令框运行:mongod -dbpath 安装地址\data
5.访问地址:http://localhost:27017(如果不报错,本地环境就安装好了)
基本的概念是文档、集合、数据库,这个概念有点抽象,那么我们对比sql来深入了解一下,没有sql经验的同学,先学习下Mysql
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
database | database | 数据库 |
Table(表格) | Collection(集合) | 数据库表/集合 |
Row(行) | Document(文档) | 数据记录行/文档 |
Column(列) | Field(字段) | 数据字段/域 |
index | index | 索引 |
table joins(联合查询) | (嵌入文档) | 表连接,MongoDB不支持 |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
数据类型 | 描述 |
String | 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 |
Integer | 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。 |
Boolean | 布尔值。用于存储布尔值(真/假)。 |
Double | 双精度浮点值。用于存储浮点值。 |
Min/Max keys | 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 |
Array | 用于将数组或列表或多个值存储为一个键。 |
Timestamp | 时间戳。记录文档修改或添加的具体时间。 |
Object | 用于内嵌文档。 |
Null | 用于创建空值。 |
Symbol | 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 |
Date | 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 |
Object ID | 对象 ID。用于创建文档的 ID。 |
Binary Data | 二进制数据。用于存储二进制数据。 |
Code | 代码类型。用于在文档中存储 JavaScript 代码。 |
Regular expression | 正则表达式类型。用于存储正则表达式。 |
1.查看数据库:
Show dbs
2.插入数据:
use database【这一步相当于创建】
db.database.insertOne(json格式数据)【这一步插入数据】
3.删除数据库:
Db.dropdatabase
4.创建集合
Use database
db.createCollection(name, options)
Eg:db.createCollection("message",{size:80})
段 | 类型 | 描述 |
capped | 布尔 | (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 |
autoIndexId | 布尔 | 3.2 之后不再支持该参数。(可选)如为 true,自动在 _id 字段创建索引。默认为 false。 |
size | 数值 | (可选)为固定集合指定一个最大值,即字节数。 |
max | 数值 | (可选)指定固定集合中包含文档的最大数量。 |
5.查看集合
show collections 或 show tables
6.删除集合
db.collection.drop()
7.插入文档(集合中插入数据:document结构为json):
db.collect.insert(document)
8.修改文档(document结构为json):
db.collect.update(document)
9.删除文档(document结构为json):
db.collect.remove(document)
10.查询文档(个人理解:pretty相当于sql里面的where或者过滤器):
db.collect.find()
db.collect.findOne()
db.collect.find().pretty()
db.collect.find().limit(长度)
db.collect.find().skip(数字);.skip(指定跳过数据个数)
db.collect.find().sort({key:1});(sort(key:1表示升序 -1表示降序):key表示排序的字段)
db.collect.find({$or: [{key1: value1}, {key2:value2}]}).pretty();(or条件)
通配符(类型见表):
uble | 1 | |
String | 2 | |
Object | 3 | |
Array | 4 | |
Binary data | 5 | |
Undefined | 6 | 已废弃。 |
Object id | 7 | |
Boolean | 8 | |
Date | 9 | |
Null | 10 | |
Regular Expression | 11 | |
JavaScript | 13 | |
Symbol | 14 | |
JavaScript (with scope) | 15 | |
32-bit integer | 16 | |
Timestamp | 17 | |
64-bit integer | 18 | |
Min key | 255 | Query with -1. |
Max key | 127 |
11.添加索引:
db.collection.createIndex({"key":value})
12.聚合方法:
db.collection.aggregate(AGGREGATE_OPERATION)
关键字:
表达式 | 描述 | 实例 |
$sum | 计算总和。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg | 计算平均值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min | 获取集合中所有文档对应值得最小值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max | 获取集合中所有文档对应值得最大值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
$push | 将值加入一个数组中,不会判断是否有重复的值。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) |
$addToSet | 将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) |
$first | 根据资源文档的排序获取第一个文档数据。 | db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) |
$last | 根据资源文档的排序获取最后一个文档数据 | db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) |
函数对比(Mysql对比,方便记忆):
作/函数 | mongodb聚合操作 |
where | $match |
group by | $group |
having | $match |
select | $project |
order by | $sort |
limit | $limit |
sum() | $sum |
count() | $sum |
join | $lookup |