MongoDB对数据的操作
MongoDB的集合操作
mongodb中的集合是一组文档的集,相当于关系型数据库中的一张表
- 创建集合
- MongDB使用db.createCollection()函数来创建集合
- 语法格式为:db.createCollection(name,options)
- name:要创建的集合名称。
- options:可选参数,指定有关内存大小及索引的选项。
1.1使用默认集合
在mongodb中我们可以不用创建集合,当我们插入一些数据时,会自动创建集合,并且会使用数据库的名字作为该集合的名称
- 创建一个新的数据库advance
- 将mm1的用户的db设置为advance库中:在该库下创建db.createUser({user:‘mm1’,pwd:‘mm1pwd’,roles:[{role:‘readWrite’,db:‘advance’}]})
- 使用mm1来认证操作数据库(在那个数据库创建用户就要在那个数据库认证):db.auth(‘mm1’,‘mm1pwd’)
- 想advance库中插入一条数据:db.advance.insert({“id”:“100”})
- 查看库中的集合:show collections
1.2创建没有参数的集合
在advance库中创建一个adv集合:db.createCollection(“adv”),如果mongodb开启了权限认证
1.3创建一个带参数的集合
在advance数据库中创建一个名为adv2的固定集合,整个集合空间大小为2000kb,文档最大数为100:db.createCollection(“dev2”,{capped:true,autoIndexId:true,size:2000,max:100})
2.查看集合
如果要查看已有的集合,可以使用show collections或者是show tables
3.删除集合
如果我们要删除集合,需要先切换到集合所在的数据库,使用drop()函数删除集合即可
删除dev2集合:db.dev2.drop()
MongoDB的文档操作
在MongoDB中文档是指多个键及其关联的值有序地放置在一起就是文档(即数据)
MongoDB中的文档的数据结构和JSON基本一样,所有存储在集合中的数据都是BSON格式
BSON是一种类似JSON的二进制的存储格式
1.1 使用insert将文档插入到集合adv中:db.adv.insert({name:‘mubai’,age:‘21’,school:[‘小学’,‘初中’,‘高中’]})
1.2使用save将文档插入到集合中adv中:db.adv.save({name:‘mubai’,age:‘21’,school:[‘小学’,‘初中’,‘高中’]})
1.3在mongodb3.2以后提供了insertOne函数用于插入文档:db.adv.insertOne({name:‘mubai01’,age:‘21’,school:[‘小学’,‘初中’,‘高中’]})
2.1 插入多个文档 向集合中批量插入多个文档时,需要使用数组来存放文档
2.2使用insert插入:db.adv.insert([{name:‘mm1’,age:‘1’,amount:[‘1’,‘2’,‘3’,‘4’]},{name:‘mm2’,age:‘2’,amount:[‘1’,‘2’,‘3’,‘4’]}])
2.3使用save插入:db.adv.save([{name:‘mm1’,age:‘1’,amount:[‘1’,‘2’,‘3’,‘4’]},{name:‘mm2’,age:‘2’,amount:[‘1’,‘2’,‘3’,‘4’]}])
2.4查看文档:db.adv.find()
2.5在mongodb3.2以后提供了insertMany函数,db.adv.insertMany([{name:‘mm1’,age:‘1’,amount:[‘1’,‘2’,‘3’,‘4’]},{name:‘mm2’,age:‘2’,amount:[‘1’,‘2’,‘3’,‘4’]}])
3.1 通过变量插入文档
MongoDB Shell工具允许我们定义变量,所有的变量类型为var类型,我们可以将变量作为任意插入文档的函数参数
格式:变量名={变量值}
3.2定义变量给变量赋值:demo=({name:“ms1”,amount:[‘1’,‘2’,‘3’]})
3.3插入变量:db.adv.save(demo)
3.4通过变量插入多个文档 :demo=([{name:‘mm1’,age:‘2’},{name:‘mm2’,age:‘2’},{name:‘mm3’,age:‘2’}])
3.5:db.adv.save(demo)
注意:使用mongodb shell的方式插入数据,该变量仅仅在当前窗口生效,关闭窗口则会失效,变量是存在缓存当中的
4.1更新文档使用save或者update函数来执行
update()函数用于更新已存在的文档
格式:db.adv.update({查询条件},{更新内容},{更新参数(可选)})
4.2将mm1的数据更改:db.adv.update({age:‘1’},{name:‘ms’,age:‘3’}),注意的是,在完成更新操作的时根据查询条件来更新内容,如果不需要更新的内容也需要写入,不然更新时数据会丢失
更新操作符号$set
$set操作符:用来指定一个键并更新键值,若键不存在则会创建该键值。
语法格式:db.adv.update({查询条件},{更新操作符:{更新内容}})
1.1使用 $set更新文档数据:db.adv.update({age:‘1’},{$set:{name:‘ms’,age:‘3’}})
1.2使用set来添加文档数据:db.adv.update({age:‘1’},{$set:{addr:‘湖北’}})
1.3多个文档的更新:db.adv.update({name:‘ms’},{$set:{age:‘18’,amount:[‘1’,‘2’,‘3’]}},{multi:true})
使用multi对数据进行批量的更新操作
$inc操作符
$inc操作符:可以对文档某个为数字型(只能是数字型)的键进行增减操作
db.adv.update({name:‘mm1’},{$inc:{age:2}},{multi:true})
递减则改为负数即可
$unset操作符
$unset操作符:用来删除键
:db.adv.update({name:‘ms’},{$unset:{age:‘18’}})
$push操作符
$push操作符:向文档的某个数组类型的键添加一个数组元素,不过滤重复的数据,添加时如果键存在,要求键值必须为数组,键不存在则创建数组类型的键
db.adv.update({name:‘ms’},{$push:{amount:1}})
如果添加的是数组,则会在该数组的后面一位上追加一个数组类型的值
$pop操作符号
删除数据元素
1表示从数组的尾部删除:db.dev.update({name:‘mm1’},{$pop:{amount:1}})
-1则表示是从数组头部删除
$pull操作符号
从数组中删除满足条件的元素
db.adv.update({name:‘ms’},{$pull:{amount:1}})
或删除数组中所有满足条件的元素
$pullAll操作符号
从数组中删除满足条件的多个元素
db.adv.update({name:‘ms’},{$pullAll:{amount:[“1”,“2”]}})
$rename操作符
对键进行重新命名:db.adv.update({name:‘ms’},{$rename:{“amount”:“amounts”}})
使用save()函数来更新文档
save()方法通过传入的文档来替换已有文档
save()方法通过传入文档来替换已有文档:db.adv.save({"_id" : ObjectId(“6184c67867939d2d927064cc”),name:‘mubai1’})
删除文档
remove()函数
使用remove()函数可删除集合中的指定文档。
语法格式:remove({指定删除条件},删除参数(可选参数))
因为remove函数会删除所有满足条件的文档,所有可以用_id来指定需要删除的文档
db.adv.remove({"_id" : ObjectId(“6184a4f367939d2d927064cb”)})
如果使用的条件在集合中可以匹配多条数据,那么remove()函数会删除所有满足条件的数据
db.adv.remove({name:“ms”},1)可以在后面添加参数,该参数1或者2都是删除第一条数据
注意:remove()方法不会释放空间,需要拥有dbAdminAnyDatabase权限内的用户执行db.repairDatabase()来回收磁盘空间。
deleteOne()函数
该函数是官方推荐删除文档的方法,该方法只删除满足条件的第一条文档db.adv.deleteOne({name:‘mm1’})
deleteMany()函数
deleteMany函数是官方推荐的删除方法,该方法删除满足条件的所有数据
:db.adv.deleteMany({name:“ms”})
删除集合中的所有文档
使用remove函数删除集合中的所有文档
语法格式:remove({})
使用deleteMany函数删除集合中的所有文档
语法格式:deleteMany({})
查询文档
find()函数
在MongoDB中可以使用find()函数查询文档
格式:find({查询条件(可选)},{指定投影的键(可选)})
db.adv.find({name:‘mm2’}).pretty():查询name=mm2格式化输出
findOne()函数
只能返回满足条件的第一条数据,如果未做投影操作该方法自带格式化输出功能
:db.adv.findOne({name:“mubai”})
模糊查询
在MongoDB中可以通过//与^和$实现模糊查询,使用模糊查询时条件不能放到双引号或单引号
:db.adv.find({name:/m/}):查询包含m
:db.adv.find({name:/^m/}):查询以m开头
:db.adv.find({name:/m$/}):查询以m结尾的
find()函数投影操作
在find函数中可以指定投影键
格式:find({查询条件},{投影键名:1(显示该列),投影键名:0(不显示该列)})
db.adv.find({name:‘mm2’},{age:1,_id:0}):显示name为mm1的文档中age键,不显示_id键
条件操作符
$gt >
条件操作符用于比较两个表达式并从mongodb集合中获取数据
:db.adv.find({age:{$gt:3}})
$lt <
该操作符可以对数字或日期进行判断
:db.adv.find({age:{$lt:3}})
$gte >=
db.adv.find({age:{$gte:3}})
$lte <=
db.adv.find({age:{$lte:3}})
$eq ==
$ne !=
$and
使用该操作符表示多条件间并且关系
格式:find({$and:[{条件一},{条件二}]})
如果在查询中给定了多个查询条件,条件之间默认关系为and
db.adv.find({age:{$gt:1,$lt:5}})
使用and的查询
db.adv.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: and:[{age:{gt:1,KaTeX parse error: Expected 'EOF', got '}' at position 5: lt:5}̲},{name:{eq:‘mm3’}}]})