目录
- 首先在终端上,我们先执行`mongo` 来启动运行mongodb
- 一. 查看所有数据库
- 二. 创建数据库yango_db
- 三. 创建user集合(表),也是插入数据
- 四. 显示当前数据集合
- 五. 删除当前集合
- 六. 删除数据库
- 七. 查询数据
- 1. 查询user集合所有数据
- 2. 条件查询,查询age=18的数据
- 3. 条件查询,查询age>24的数据`$gt`
- 4. 条件查询,查询age>=24的数据`$gte`
- 5. 条件查询,查询age<20的数据`$lt`
- 6. 条件查询,查询age<=20的数据`$lte`
- 7. 模糊查询,查询name包含‘李’字的数据`/李/`
- 8. 模糊查询,查询name以‘李’字开头的数据`/^李/`
- 9. 模糊查询name以‘六’结尾的数据`/六$/`
- 10. 查询指定列(字段)的数据,如name,age
- 11. 排序查询`sort`,升序:1,降序:-1
- 12. 查询前2条数据`limit`
- 13. 查询第4条(不包含第4条)之后的数据`skip`
- 14. or 和 查询 `$or`
- 15. 查询第一条数据`findOne`
- 16. 查询数据数量(长度)`count`
- 八. 修改数据`update`
- 九. 删除数据`remove`
- 10. 索引基础
- 11. 复合索引
- 12. 唯一索引(类似sql主键)
首先在终端上,我们先执行mongo
来启动运行mongodb
一. 查看所有数据库
show dbs
二. 创建数据库yango_db
use yango_db
(注:这里还并没有在本地创建该数据库,需要在该数据库添加集合(表)之后才算真正创建了
)
三. 创建user集合(表),也是插入数据
db.user.insert({"name":"小二",age:18})
注意:mongodb的数据和json数据一样,格式要正确
四. 显示当前数据集合
show collections
五. 删除当前集合
在这之前我们先创建多一个admin集合,方便查看,下面删除user集合
db.user.drop()
六. 删除数据库
db.dropDatabase()
七. 查询数据
1. 查询user集合所有数据
db.user.find()
注意:在操作增删改查之前,需要先use yango_db进入到当前数据库中
2. 条件查询,查询age=18的数据
db.user.find({"age": 18})
3. 条件查询,查询age>24的数据$gt
db.user.find({"age": {$gt: 24}})
4. 条件查询,查询age>=24的数据$gte
db.user.find({"age": {$gte: 24}})
5. 条件查询,查询age<20的数据$lt
db.user.find({"age": {$lt: 20}})
6. 条件查询,查询age<=20的数据$lte
db.user.find({"age": {$lte: 20}})
7. 模糊查询,查询name包含‘李’字的数据/李/
db.user.find({"name": /李/})
8. 模糊查询,查询name以‘李’字开头的数据/^李/
db.user.find({"name": /^李/})
9. 模糊查询name以‘六’结尾的数据/六$/
db.user.find({"name": /六$/})
10. 查询指定列(字段)的数据,如name,age
下面只查询name的字段, 注意:要查询那个字段就写该字段=1,比如{name: 1},如果只查询age字段就{age: 1},_id是自带的。
db.user.find({},{name: 1})
也可以添加条件,比如age>20的数据,且只显示age字段
db.user.find({"age": {$gt: 20}}, {age: 1})
11. 排序查询sort
,升序:1,降序:-1
下面按照age升序排序
db.user.find().sort({age: 1})
下面按照age降序排序
db.user.find().sort({age: -1})
12. 查询前2条数据limit
db.user.find().limit(2)
13. 查询第4条(不包含第4条)之后的数据skip
注意: 计数从0开始
db.user.find().skip(4)
到这里可以结合limit实现分页查询,比如查询第4条到第6条数据(实际5,6两条)
db.user.find().skip(4).limit(2)
可以总结分页算法,比如page是页数,num为每一页显示的记录条数,那么算法为:skip((page-1) * num).limit(num)
。比如要查询第3页,每页显示10条数据,那么查询为skip(20).limit(10)
14. or 和 查询 $or
查询age=20或者age=22的数据
db.user.find({$or: [{"age": 20},{"age": 22}]})
15. 查询第一条数据findOne
db.user.findOne()
相当于limit(1)
16. 查询数据数量(长度)count
db.user.find().count()
八. 修改数据update
比如要将name=张三的的名字改为张三丰
db.user.update({"name": "张三"}, {$set: {"name": "张三丰"}})
注意: $set一定加上,否则将不是更新,而是整条数据替换掉
以上为单条数据修改,如果要皮 批量修改的话,需要在后面添加{multi: ture}
九. 删除数据remove
比如要删除age=18的数据
db.user.remove({age: 18})
注意:remove需要添加条件删除指定的数据,如果不添加条件,则是删除所有数据
db.user.remove({})
如果条件中有多条数据,又想只删除一条数据,可以在后面添加{justOne: true}
10. 索引基础
1. 查询所需时间
在所查询语句后面添加.explain('executionStats')
,例如:
db.user.find({"name": "yy99"}).explain('executionStats')
上面3万多条数据需要19毫秒,如果数据量几百万或者几千万的时候所用的时间更长,所以这时候需要设置索引查询
2. 创建索引命令db.集合名.ensureIndex({"字段名": 1})
, 1为升序,-1为降序
db.user.ensureIndex({"name": 1})
3. 获取当前集合索引db.集合名.getIndexes()
db.user.getIndexes()
这时候我们再进行查询刚才的数据看看需要多少时间
db.user.find({"name": "yy99"}).explain('executionStats')
再次查询时候执行时间变成0毫秒
4. 删除索引db.集合名.dropIndex({"字段": 1})
db.user.dropIndex()
11. 复合索引
db.user.ensureIndex({"name": 1, "age": 1})
该索引被创建后,基于name和age的查询将会用到该索引,或者是基于name的查询也会用到该索引,但是只是基于age的查询将不会用到该索引。因此可以说,如果想用到复合索引,必须再查询条件中包含复合索引中的前N个索引列。然而如果查询条件中的键值和复合索引中的创建顺序不一致的话,MongoDB可以智能的帮助我们调整顺序,以便使复合索引可以为查询所用。例如:
db.user.find({age: 30, "name": "yy99"})
12. 唯一索引(类似sql主键)
db.user.ensureIndex({"age": 1},{"unique": true})
注意:如果age有重复值的话,设置就会报错。如果设置成功,再插入数据中age有重复字段也会报错,因为age设置了唯一索引