说明
1 什么是
- 一个介于关系型和菲关系型
- 存储数据类似json
- 查询语言类似面向对象的查询
- 是一个面向对象的文档型数据库
2 文档结构模型
- 文档(相当于数据库一条记录) ----es中文档
- 集合 (相当于表) -------------es中类型
- 数据库(相当于数据库)-------------es中索引
3 应用场景
- 表结构不明确 数据量不断变大-----------pg中的jsonb
- 更高的写入负载------------------存大量日志
- 数据量巨大
- 高可用 ----自带高可用自动主从切换
4 不适用
- MongoDB不支持事务操作,需要用到事务的应用建议不用MongoDB
- MongoDB目前不支持join操作,需要复杂查询的应用也不建议使用MongoDB。
部署
- 创建
- docker run -d --name mongodb -v /mydata/mongo/mogodata:/data/db -p 27017:27017 mongo --auth
- 创建密码
- docker exec -it 93e8ea982d7d mongo 进入
- use admin
- db.createUser({ user: 'root', pwd: '123', roles: [ { role: "root", db: "admin" } ] })
- 创建可视化插件
- docker run -d --name mongo-express -p 8081:8081 --link mongodb:mongo --env ME_CONFIG_MONGODB_ADMINUSERNAME='root' --env ME_CONFIG_MONGODB_ADMINPASSWORD='123' mongo-express
- 推荐用Navicat 比较好使
java 连接
server.port=8010
spring.application.name=spirngboot-int-mongodbeg
spring.data.mongodb.database=admin
spring.data.mongodb.host=172.18.72.153
spring.data.mongodb.password=123
spring.data.mongodb.port=27017
spring.data.mongodb.username=root
package com.hzc.hzcmgapi;
import com.hzc.hzcmgapi.model.User;
import com.mongodb.client.result.UpdateResult;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
@SpringBootTest
class HzcMgApiApplicationTests {
@Autowired
private MongoTemplate mongoTemplate;
/**
* 增加
*/
@Test
void add() {
User user = new User("2", "张三", 20);
//存储
mongoTemplate.save(user);
//设置集合点 就是表名
// User aaa = mongoTemplate.save(user, "人表");
System.out.println(1233);
}
/**
* 删除
*/
@Test
void delete() {
Query query = new Query();
//拼装删除数据
query.addCriteria(Criteria.where("id").is("1"));
mongoTemplate.remove(query, "人员表");
mongoTemplate.remove(query, User.class);
}
//修改
@Test
void update() {
Query query = new Query(Criteria.where("id").is("2"));
Update update = new Update().set("age", 66).set("name", "非关系型数据库");
//更新查询返回结果集的第一条
UpdateResult updateResult = mongoTemplate.updateFirst(query, update, User.class);
//更新结果集全部
// UpdateResult updateResult1 = mongoTemplate.updateMulti(query, update, User.class);
}
//查
@Test
void search() {
Query query = new Query(Criteria.where("name").is("非关系型数据库"));
User one = mongoTemplate.findOne(query, User.class);
System.out.println(one);
}
}