MongoDB入门笔记(一)

MongoDB 是一个面向文档存储的数据库,可以将类似于JSON结构的数据直接存入数据库中,而不必像关系数据库一样事先设置表格结构。

数据库操作

查看数据库:

1
show dbs

创建/切换数据库:

1
use mydb

删除数据库:

1
2
use mydb
db.dropDatabase()

集合操作

查看集合:

1
show collections

创建集合:

1
db.createCollection("users")

删除集合:

1
db.users.delete(0)

文档操作

插入单条数据:

1
db.users.insertOne({"id": 1001, "name": "Jack", "age": 23})

插入多条数据:

1
2
3
4
5
db.users.insertMany([
{"id": 1003, "name": "Jacio", "age": 18},
{"id": 1004, "name": "Junien", "age": 28},
{"id": 1005, "name": "Jianio", "age": 23}
])

查询数据:

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
# 查询所有记录
db.users.find()

# 按条件查询
db.users.find({"id": 1004}) // 等于
db.users.find({"age": {$gt: 20}}) // 大于
db.users.find({"age": {$lt: 20}}) // 大小于于
db.users.find({"age": {$gt: 20, $lt: 25}}) // 大于、小于
db.users.find({"age": {$ne: 23}}) // 不等于
db.users.find({"age": {$gte: 23}}) // 大于等于
db.users.find({"age": {$lte: 23}}) // 小于等于

# 逻辑条件查询
db.users.find({$or: [{"id": 1002}, {"id": 1003}]}) // or
db.users.find({$or: [{"id": 1002}, {"age": {$gt: 23}}]}) // id=1002 or age > 23
db.users.find({$and: [{age: {$ne: 21}}, {age: {$ne: 23}}]}) // age != 21 and age != 23
// id < 1003 and (age > 23 or age = 17)
db.users.find({"id": {$lt: 1003}, $or: [{"age": {$gt: 23}}, {"age": 17}]});

# 查询时返回指定的字段
db.users.find({"id": 1004}, {"id":1, "name": 1}) // 只返回id和name字段

# 查询时排除指定的字段
db.users.find({"id": 1004}, {"age":0}) // 排除age字段

# 使用正则进行模糊匹配
db.users.find({"name": /^.{4}$/}) // 查询name长度为4的记录
db.users.find({"name": /^D/}) // 查询name为D开头的

# 查询指定类型的记录
db.users.find({"age": {$type: "string"}}) // 查询age为string类型的记录

# 限制返回的记录条数
db.users.find().limit(2)

# 跳过记录数
db.users.find().skip(4).limit(2)

#统计记录条数
db.users.find().count()
#或者
db.users.count()

数据类型参考:$type数据类型

删除记录:

1
2
3
4
5
6
7
8
# 删除单条记录
db.users.deleteOne({"id": 1005})

# 删除多条记录
db.users.deleteMany({"age": 23})

# 删除全部数据
db.users.deleteMany({})

更新记录:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 全量更新
db.users.update({"id": 1004}, {"id": 1004, "name": "Juncle", "age": 28})

# 更新指定字段
db.users.update({"id": 1004}, {$set: {"age": 38}})

# 更新多条记录
db.users.update({age:17}, {$set: {age: 19}}, {multi:true})

# 字段自增加2
db.users.update({id: 1002}, {$inc: {age: 2}})

# 字段减2
db.users.update({id: 1002}, {$inc: {age: -2}})

# 存在则更新,不存在则插入(upsert=true)
db.users.update({name: "mao"}, {id: 1, name: "mao", "age": 38}, {upsert: true})

排序:

1
2
3
4
5
6
7
8
# 按id升序排序
db.users.find({}).sort({id: 1})

# 按id降序排序
db.users.find({}).sort({id: -1})

# 多个条件排序
db.users.find().sort({"age": 1, "id": 1})

索引:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 获取已有索引
db.users.getIndexes()

# 在name字段创建索引(自动生成索引名称)
db.users.createIndex({"name": 1})

# 指定索引名称
db.users.createIndex({"name": 1}, {name: "name_index"})

# 根据索引名称删除一个索引
db.users.dropIndex("name_1")

# 创建一个唯一索引
db.users.createIndex({"name": 1}, {unique: true})