安装mongodb数据库
需要在bin的同级目录下创建data/db
创建之后链接
进入mongod包的bin目录下输入mongod,启动MongoDB数据库,需要上面的data/db存放数据的目录,如果没有可以通过--dbpanth配置
进入mongod包的bin目录下输入mongo,启动一个可以使用shell操作数据库的页面
运行mongo
然后进入shell指令模式
MongoDB数据库
是通过集合来管理数据库的,类似mysql里的表,但是字段可以随意,而且字段可以存储集合和数组,不会像mysql的表一样,一旦字段确定,字段类型局限,更改麻烦,mongdb比较灵活。
shell命令:
show dbs(显示所以数据库)
use 数据库名字
使用数据库,使用数据库如果不插入数据,继续show dbs是看不到数据库test3的
创建访问数据库用户
db.createUser(
{
user:"test",//用户名
pwd:"12345",//密码,注意:如果密码是全数字,在idea集成springboot时候需要加双引号!
roles:[//角色
{ role: "readWrite",db:"test3" } //role:权限,db:数据库名
]
}
)
登陆数据库
use test3
db.auth("test","12345")
回车,控制台输出1说明登陆成功。
插入数据:insert()
语法:db.集合名.insert({集合元素})
集合有一个id字段,作为整个文档的主键,当没有给该字段赋值,会自动生成一个ObjectId类型的主键,在集成springboot时,要给对应id字段赋值,而不让系统自动生成。
查询数据:find()
语法:db.集合名.find()
查询集合中所有元素
通过条件查询
db.集合名.find({_id:"mongodb"})
db.集合名.find({"集合元素.集合属性":值}) 如果有更大查询要求可以使用表达式{$gt:值}表示大于该值的数据。
gt(大于)、gte(大于等于)、lt(小于)、lte(小于等于)、eq(等于)、ne(不等于)、in(等同于in,例如db.baike.find({tag:{$in:["IT","Spring"]}},只可以在数组中使用)、nin(not in)
更新数据:updateone()
db.集合名字.updataOne(查询条件,更新内容,)替换某字段内容
> db.baike.updateOne({_id:"springmvc"},{$set:{"desc":"sprngboot"}});
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.baike.find()
{ "_id" : "springmvc", "comment" : { "good" : 200000, "bad" : 12 }, "desc" : "sprngboot", "tag" : [ "IT", "Spring" ] }
db.集合名字.updataMany(查询条件,更新内容,)
db.集合名字.replaceOne(查询条件,更新内容,)替换满足条件的整一行(除了主键_id外)数据
> db.baike.replaceOne({_id:"springmvc"},{desc:"springboot",tag:["1","2"]});
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.baike.find()
{ "_id" : "springmvc", "desc" : "springboot", "tag" : [ "1", "2" ] }
删除操作deleteOne()
db..deleteMany({条件})删除满足条件的所有文档,没有制定条件,删除全部文档
db.deleteOne({条件})
集成Springboot
加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
且在application.yml中配置MongoDB连接信息
spring:
data:
mongodb:
host: localhost
port: 27017
username: root
password: "12345"
database: baike
API
MongoTemplate
在Controller层的类中声明实例变量
import org.springframework.data.mongodb.core.MongoTemplate;
import javax.annotation.Resource;
@RestController
public class testController {
@Resource
private MongoTemplate mongoTemplate;
}
插入方法insert(),save()
mongoTemplate.insert(Object obj);
mongoTemplate.save(Object obj);
两者的区别
解释比较好的博客:mongodb insert()和save()的相同点和不同点_那年那些事儿-CSDN博客
查找方法findById(name,Class)
通过_id=name查找数据,返回一个对象。
Baike baike = mongoTemplate.findById(id, Baike.class);
查找方法find(Query query, Class<T> entityClass)
@GetMapping("/baike/comment/{bad}")
public List<Baike> findBaiKeId(@PathVariable int bad){
Criteria criteria = where("comment.bad").is(bad);
baiKes = mongoTemplate.find(query(criteria), Baike.class);
return baiKes;
}
Criteria criteria = where("comment.bad").is(bad);通过where条件来筛选目标,然后还能继续.and().is或者.and().gt()。然后通过query()方法转化为Query,然后调用find方法来查找符合class的集合。这里的Baike.class需要添加注解@Document(collection = "增改改查的集合名")指定操作的集合,集合名的属性如果与属性名字不一样可以使用@Field注解。
@Data
@Document(collection="baike")
public class Baike {
@Field("_id")
private String id;
private String desc;
private List<String> tag;
private Comment comment;
private Date crateDate;
private Date updateDate;
}
分页
query.limit(limit);//每一页的个数
query.skip(offset);//需要跳过多少个数据limit*(页数-1)
query.with(Sort.by(Sort.Direction.DESC, "createTime"));//按创建时间降序