MongoDB操作起来非常灵活,不会像传统的关系型数据库那样有很多限制,首先来看数据库的创建和删除如何完成。
1.创建数据库
语法:use 数据库名。这个语法放在关系型数据库中是切换数据库的意思,在MongoDB中,如果该数据库存在,直接切换,如果不存在,则先创建,再切换,就是这么简单方便。比如,我们创建一个名为testdb的数据库,代码如下。
use testdb
如图,终端打印switched to db testdb,表示testdb数据库已经创建完毕,并且系统已经切换到了该数据库中。
2.查看数据库
show dbs
我们并没有在结果列表中看到刚才创建的testdb数据库,这是因为testdb只是创建,还没有添加数据,空的数据库不会在show dbs中显示。
3.查看当前切换的数据库
db
4.删除数据库
先切换到要删除的数据库use db,再执行删除操作db.dropDatabase(),比如,删除testdb数据库。
use testdb
db.dropDatabase()
如图,终端打印{"ok":1},表示删除成功。
数据库创建完成之后,接下来就是添加数据,MongoDB中数据的存储结构和非关系型数据库有很大区别,MongoDB是以集合的形式来存储数据的,并且数据是以JSON的格式存储到集合中的。
5.创建集合
集合的创建和数据库的创建类似,不需要先创建,再操作,创建和操作可以用一条命令同时完成,比如,我们现在再testdb中创建一个my_student集合,并且给集合中添加数据{x:1,name:"张三"}。
语法:db.集合名.insert({JSON})
db.my_student.insert({x:1,name:"张三"})
如图,终端打印WriteResult({"nInserted":1})表示添加成功,使用db.my_student.save({x:1,name:"张三"})也可以完成添加功能。
6.查看集合
show collections或者show tables,都是查看当前数据库全部集合的命令。
show tables
show collections
7.查询全部数据
db.my_student.find()
如图,查询出了全部数据,我们可以看到每一条数据除了x和name属性之外,还有一个_id属性,并且其类型为ObjectId,该属性是MongoDB自动添加的,相当于主键,并且不会重复,所以我们就不需要设置自增来保证主键的唯一性了。
8.精确查找,比如,查找x=1的数据
db.my_student.find({x:1})
9.查询结果集合中的第1条数据
如果同时查询出多条符合条件的数据,可以使用findOne来获取第1条结果。
db.my_student.findOne({x:1})
10.分页查询
MongoDB的分页查询很简单,语法类似于MySQL,使用limit关键字完成,比如,查询前3条记录。
db.my_student.find().limit(3)
如果要查询第2页的3条记录,结合skip()方法,skip(num)是跳过前num条记录。
db.my_student.find().skip(1).limit(3)
查询的结果是第2条到第4条记录。
11.查询排序
根据x的值进行升序排列。
db.my_student.find().sort({x:1})
根据x的值进行降序排列。
db.my_student.find().sort({x:-1})
12.修改
将x:1的数据name值修改为Jack。
db.my_student.update({x:1},{x:1,name:"Jack"})
修改完成之后,再查询,可以看到name已经改为了Jack。
13.如果修改一条不存在的数据,不会报错,对数据没有做出修改,并给出信息。
db.my_student.update({x:11},{x:11,name:"Tom"})
nMatched表示匹配成功为0条,nModified表示修改的数据为0条。
14.我们给update方法添加一个参数,结果就不一样了。
db.my_student.update({x:11},{x:11,name:"Tom"},true)
nUpserted表示如果数据不存在,先创建,再修改,所以update方法的第3个boolean类型参数表示的是如果数据不存在,是否要创建,默认值为false,表示不创建。
15.如果同时存在多条匹配的数据,默认只修改第一条。
db.my_student.update({x:1},{x:1,name:"David"},false)
如图,只有一条x:1的数据被修改了,如果需要多x:1的数据全部进行修改,添加一个参数即可,同样是boolean类型的参数,默认false表示只修改第一条,true表示全部修改,需要注意的是最后一个参数为true时的时候必须使用{$set:}进行更新。
db.my_student.update({x:1},{$set:{x:1,name:"Jack"}},false,true)
16.删除数据
将x:1的数据删除,集合中所有满足x:1的数据都会被删除。
db.my_student.remove({x:1})
17.清空集合
如果remove()方法参数为空,会删除集合中所有数据。
db.my_student.remove({})