文章目录
- 1、MongoDB组成
- 2、基本指令
- 3、安装Studio 3T
- 4、操作语句
- db操作
- collection操作
- document操作
- document 查询
- 5、开发使用
1、MongoDB组成
MongoDB中有三个概念需要大家了解:数据库、集合、文档
数据库database: 数据库是一个仓库,在仓库中可以存放集合。
集合collection: 集合类似于数据,在集合中可以存放文档
文档document: 文档是最小的单位,存储和操作的内容就是文档
document这一点类似于ES中的数据结构。
2、基本指令
3、安装Studio 3T
NoSql Manager for MongoDB收费,在这里我使用的是Studio 3T
https://robomongo.org/
下载无脑下一步
4、操作语句
db操作
显示数据库
show dbs
切换数据库,没有就新建一个
use admin
显示你在哪个数据库里
Db
删除当前你use的那个数据库
db.dropDatebase()
新建数据库
use 数据库名字
建完了show dbs不会立刻显示,因为刚才新建的数据库里面没有数据。所以显示不出来。
collection操作
显示这个数据库中有什么集合
show collections
新建集合,在use 一个数据库的情况下
db.createCollections(name,options)
然后show dbs现在可以看到use的数据库了
删除集合 ,在现在这个Use的数据库的情况下
db.你想要的collectionname.drop()
然后就删掉了
document操作
collectionname代指相对应的collcetion名字(mysql里叫表,Mongodb里叫collection,都是一个数据库里的一种结构) 现在操作的不是表也不是集合,而是集合里的一个数据结构叫做document,文档,文档相当于mysql里的一个记录行。
往collection里加数据,直接新建document
db.collectionname.insert({"name":"wangzirui"})
增加多条要在insert的多个对象的外面加一个中括号,表示这是一个对象数组。
db.collectionname.insert([{name:"wangzirui"},{name:"laoli"}])
查看collection里的数据
db.collectionname.find()
Save,在_id一样的情况下可以不报错,然后直接覆盖掉刚才重复Id的内容。
db.collectionsname.save({_id:1001,name:"laowang",age:22})
更新document数据
db.collectionname.update({当前数据},{替换数据},{配置项})
db.collectionname.update({name:"laotie"},{name:"ergou"})
这样会删除其他内容,只存在一个name :ergou 所以要加$set保留其他的参数
db.collectionname.update({name:"laotie"},{$set:{name:"ergou"}})
配置项里加{Multi:true}加一个这个的话可以让多个name:"laotie"一起改
db.collectionname.update({name:"laotie"},{$set:{name:"ergou"}},{multi:true})
删除document内容,如果不加第二个参数,默认是把集合里的符合第一条的都删掉。
Db.collectionname.remove({name:"laotie"},{justOne:true})
document 查询
经过上面的讲述,能了解到一点,基于database来查询collections里的数据都是通过db.collcetion_name.方法 来进行操作的,同理。对document的查询,我们之前也在查看collection时用过,他就是find()方法。
find里面可以加参数,不加的话就是现实collection里所有的document。
- find()方法里可以加条件,例如db.collectionname.find({age:18})
如果一行一行的话不好看,可以再db.collectionname.find({age:18})后面加.pretty()
- 比较运算符
less than 小于 KaTeX parse error: Expected '}', got 'EOF' at end of input: …name.find(age:{lt:18})
less than equal 小于等于 $lte
Geater than 大于 $gt
$gte 大于等于
$ne 不等于
- 取范围内的 $in
KaTeX parse error: Expected '}', got 'EOF' at end of input: …ame.find({age:{in:[10,20,30]}})
- 并操作
db.collection_name.find(age:18,name:“laotie”)
- 或操作
db.collection_name.find({$or:[{age:18},{name:“laotie”}]}
- 正则
db.collection_name.find({age:/1/})或者db.collection_name.find({age:$regex:“1”})
- 限制和跳过,一般用于分页
limit(2)
skip(2)
- 投影
比如说find({这里放具体参数},{这里放投影})
db.collection_name.find({age:{$lt:18}},{_id:0,age:1}) 这样只会显示每个对象里面只有一个age选项了
注意,如果投影里不加_id的选项的话 ,默认是自动显示的。只能给_id设置 0。如果别的字段不想让他显示直接不在里面加。其他的想要显示的话直接把属性加进去就行了。
- 通过Js函数来筛选数据
KaTeX parse error: Expected '}', got 'EOF' at end of input: …ion_name.find({where:function(){
Return age>10}})
- 根据某个字段排序
sort
db.collection_name.find().sort({age:1}) 如果降序的话要带-1
- 计数
count()
直接在查询出来的后面加上就可以显示了
db.collection_name.find({$where:function(){
Return age>10}}).count()
- 去重
db.student.distinct(“name”,{“age” : 18})
这样可以直接把name一样还有age为18的都给去重
5、开发使用
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
在配置文件中配置链接:
spring:
data:
mongodb:
uri: mongodb://${base.config.mongodb.user}:${base.config.mongodb.password}@${base.config.mongodb.hostname}:${base.config.mongodb.port}/admin
将依赖在项目中注入
@Resource
private MongoTemplate mongoTemplate;
简单使用:
插入:spillwayGate为插入的对象
mongoTemplate.insert(spillwayGate, "OPCGate");
计数:
mongoTemplate.count(query, "OPCGate")
等等…看后面的文章