MongoDB入门

可视化工具

Robo 3T 下载地址

mac 终端安装

1
2
3
4
5
6
7
8
9
10
11
12
# 进入 /usr/local
cd /usr/local

# 下载
sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_64-4.0.9.tgz

# 解压
sudo tar -zxvf mongodb-osx-ssl-x86_64-4.0.9.tgz

# 重命名为 mongodb 目录

sudo mv mongodb-osx-x86_64-4.0.9/ mongodb

全局环境

1
2
3
4
5
6
7
8
# 打开配置环境终端
open -e .bash_profile

# 添加 PATH 环境变量
export PATH=/usr/local/mongodb/bin:$PATH

# 刷新配置
source .bash_profile

常用命令

1.设置存储目录
1
2
3
4
5
6
7
8
# 进入 /usr/local
cd /usr/local

# 新增数据存储目录
sudo mkdir -p /usr/local/var/mongodb

# 设置数据存放目录
mongod --dbpath /usr/local/var/mongodb
2.设置日志目录
1
2
3
4
5
6
7
8
# 进入 /usr/local
cd /usr/local

# 新增数据存储目录
sudo mkdir -p /usr/local/var/mongodb

# 设置数据存放目录
mongod --dbpath /usr/local/var/log/mongodb/mongo.log
3.连接mongodb
1
2
# 连接mongodb
mongo
4.操作数据库
1
2
3
4
5
6
7
8
# 查询所有数据库
show dbs

# 新增/切换 blog 数据库
use blog

# 删除数据库(首先切换到要删除的数据库)
db.dropDatabase()
5.操作表
1
2
3
4
5
6
7
8
# 查询所有表
show collections

# 创建表
db.createCollection("表名")

# 删除表
db.collection.drop()
6.操作数据

注: collection为表名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# 查询数据 
# query: 查询条件
db.collection.find(query)

# 查询所有数据
db.collection.find()

# 查询条件数据
# AND条件
db.collection.find({ key1:value1, key2:value2 })

# OR条件
db.collection.find({
$or: [
{key1: value1}, {key2:value2}
]
})

# 联合查询
db.collection.find({ key1:value1, $or: [{ key2:value2, key3:value3 }]})

# 新增数据
db.collection.insert({ key:value })

# 更新数据
# query : update的查询条件,类似sql update查询内where后面的。
# update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
# upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
# multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
# writeConcern :可选,抛出异常的级别。
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>
}
)

# 更新单个数据
db.collection.updateOne(<query>)

# 更新多个数据
db.collection.updateMany(<query>)

# 删除数据
# query :(可选)删除的文档的条件。
# justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
# writeConcern :(可选)抛出异常的级别。

# 2.6版本以前
db.collection.remove(
<query>,
<justOne>
)

# 2.6版本以后
db.collection.remove(
<query>,
{
justOne: <boolean>,
writeConcern: <document>
}
)

# 删除一条数据
db.collection.deleteOne(<query>)

# 删除多条数据
db.collection.deleteMany(<query>)

查询条件语句:

等于 {:}
小于 {:{$lt:}}
小于等于 {:{$lte:}}
大于 {:{$gt:}}
大于等于 {:{$gte:}}
不等于 {:{$ne:}}
7.操作符
1
2
3
# 根据数据类型查询 操作符$type
# 例子🌰: 查询title为字符串的数据
db.col.find({"title" : {$type : 'string'}})
8.方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# NUMBER: 条数

# limit方法 读取的条数
db.collection.find().limit(NUMBER)

# skip方法 跳过的条数
db.collection.find().limit(NUMBER).skip(NUMBER)

# 例子🌰: 每页10条,查询第3页
db.collection.find().limit(10).skip(20)

# sort方法 排序
# 1: 升序 -1: 降序
db.collection.find().sort({<key>:<1或-1>})

# count方法 总条数
db.collection.find().count()

注:skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()

9.聚合查询
1
2
# aggregate方法
db.collection.aggregate([{$group : {<new_key> : "$<key>", <nwe_key> : {$sum : 1}}}])
$sum 计算总和 db.collection.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$sum : “$likes”}}}])
$avg 计算平均值 db.collection.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$avg : “$likes”}}}])
$min ​最小值 db.collection.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$min : “$likes”}}}])
$max 最大值 db.collection.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$max : “$likes”}}}])
$push 将值加入一个数组中,不会判断是否有重复的值 db.collection.aggregate([{$group : {_id : “$by_user”, num_tutorial : {
$push: “$likes”}}}])
$addToSet 将值加入一个数组中,会判断是否有重复的值,若相同的值在数组中已经存在了,则不加入 db.collection.aggregate([{$group : {_id : “$by_user”, num_tutorial : {
$addToSet : “$likes”}}}])
$first 根据资源文档的排序获取第一个文档数据 db.collection.aggregate([{$group : {_id : “$by_user”, num_tutorial : {
$first : “$likes”}}}])
$last 根据资源文档的排序获取最后一个文档数据 db.collection.aggregate([{$group : {_id : “$by_user”, num_tutorial : {
$last : “$likes”}}}])