各位同学,上篇文章我们已经学习了如何安装mongodb,传送门:Linux 基于CentOS7.3安装MongoDB 3.4以及设置账号密码,今天这篇文章,我们来分析一下mongodb的优势以及它的各种增删改查语法,版本我们使用的是3.4版本
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
传统型数据库: 结构化数据, 定好了表结构后,每一行的内容,必是符合表结构的,就是说–列的个数,类型都一样.
mongo文档型数据库: 表下的每篇文档,都可以有自己独特的结构(json对象都可以有自己独特的属性和值)
show dbs //查看当前数据库
show databases //查看当前数据库(2.4以上版本)
use 库名 //选库
show collections //查看当前库下的collections(相当于查看mysql库下的表)
show tables //查看当前库下的collections(相当于查看mysql库下的表)
db.createCollection(‘collectionName’) //创建collection
db.表名.insert(json)//隐式创建表
db.表名.drop() //删除表
db.dropDatabase() //删除当前所在的路径下的库
db.help() //帮助文档
因为mongodb这类非关系型数据库其实本身就不存在库和表的概念,所以库和表的创建都是支持隐式创建的(即只要选择使用的库,以及在插入数据时指定表名就会将库和表自动创建出来),所以各位同学不要太被传统的关系型数据库的思想所约束。
语法: db.collectionName.isnert(document);
例1:在user表中添加用户信息
db.user.insert({name:'beyondLi',age:18,hobby:['code','ball','run']})
注:可使用db.user.find()查看插入结果,后面我们会讲查询
例2:在user表中添加用户信息并指定id
db.user.insert({_id:1,name:'beyondLi',age:18,hobby:['code','ball','run']})
注:_id字段为mongo必自带字段
例3:在user表中添加多个用户信息
db.user.insert([{_id:2,name:'zhangsan',age:20,hobby:['code','ball','game']},{_id:3,name:'lisi',age:22,hobby:['paly','tv']},{_id:4,name:'wangwu',job:'teacher',sex:'man',salary:20000}])
好了,我们先插入这么几条数据,我们来做为基础数据,为后面使用
语法: db.collection.remove(查询表达式, 选项);
选项是指 {justOne:true/false},是否只删一行, 默认为false,即符合条件的全部删除
例1:删除user表中年龄为20岁的人
db.user.remove({age:20})
例2:删除user表中年龄为18岁的人并且只删除一条
db.user.remove({age:18},true)
语法:db.collection.update(查询表达式,新值,选项);
mongodb的更新操作支持很多更新行为,例:修改value值、修改key名、添加/删除key值等操作,这里只给大家举例一些常用的关键字,具体的可以到mongodb文档中进行具体学习。
例1:将user表中name为lisi的name值改为lisihuan(一条)
db.user.update({name:'lisi'},{$set:{name:'lisihuan'}})
注1:这里如果不使用$set ,则会将name为lisi的这条数据整体改为 {name:‘lisihuan’} 了,而不是只修改了name字段
注2:这里默认情况下只是将name为lisi的一条数据改为lisihuan,如果当表达式中查出的数据为多条,也只会修改其第一条,如果需要全部修改则需要添加参数multi:true,最终书写如下
db.user.update({name:'lisi'},{$set:{name:'lisihuan'}},{multi:true})
即:将user表中所有name为lisi的值改为lisihuan
例2:修改user表中名称为wangwu,将名称修改为beyondLi71、删除job字段、将sex字段重命名为gender、为salary字段增加2000元
db.user.update({name:'wangwu'},{$set:{name:'beyondLi71'},$unset:{job:1},$rename:{sex:'gender'},$inc:{salary:2000}})
其实,在上面的删除和修改时,我们已经对查询操作有了一些接触,现在我们就要详细的说一下查询操作。
语法:db.collection.find(查询表达式,查询的列);
例1: 查询user表中所有内容
db.user.find()
例2: 查询user表中所有数据的name字段
db.user.find({},{name:1,_id:0})
注:mongo默认会显示_id字段,这里我们只要name字段,所以还要设置不展示_id字段
例3:查询user表中age字段值为18的name值
db.user.find({age:18},{name:1,_id:0})
例4:查询user表中name值不等于BeyondLi的值
db.user.find({name:{$ne:'beyondLi'}})
例5:查询user表中hobby值包含code值
db.user.find({hobby:{$in:['code']}})
例6:查询user表中hobby值不包含code值
db.user.find({hobby:{$nin:['code']}})
例7:查询user表中hobby中既有code又有run的值
db.user.find({hobby:{$all:['code','run']}})
例8:查询user表中age大于15值
db.user.find({age:{$gt:15}})
注:$gt(大于)、$lt(小于)、$gte(大于等于)、$lte(小于等于),使用与上述相同,不做赘述
例9:查询user表中name为beyondLi并且age为18的信息
db.user.find({$and:[{name:'beyondLi'},{age:18}]})
例10:查询user表中name为beyondLi或age大于20的信息
db.user.find({$or:[{'name':'beyondLi'},{age:{$gt:20}}]})
例11:查询user表中全部数据只获取第二页的第一条,每页显示一条(分页)
db.user.find().skip(1).limit(1);
好了,以上就是一些查询表达式,当然这里并不是全部,还有一些可以根据数据类型、某列是否存在、取余等操作,同学们可以去mongodb官网进行查找和学习 https://docs.mongodb.com/v3.4/reference/operator/query/or/index.html
好了,以上就是关于mongodb的一些基本知识以及使用语法,接下来本人会进行与springboot的结合的文章编写,将mongodb融入到我们的实际项目中。