MongoDB不像mysql 在使用前就得创建好列字段等 MongoDB可以随时添加字段,需求可以变
MongoDB适用于:数据量大,写入操作频繁(读写都很频繁),价值较低的数据,对事物要求不高
MongoDB是一个开源的,高性能的,无模式的文档型数据库,是NoSQL数据库中的一种,是最像关系型数据库(mysql)的非关系型数据库
MongoDB中记录的是一个文档,它是一个由字段和值对(field:value)组成的数据结构。MongoDB一个文档认为就是一个对象。字段的数据类型是字符型。它的值除了使用基本的一些类型外 还可以包括其它文档,普通数组和文档数组。
关系型数据库(RDBMS):MySQL, ORACLE , DB2 , SQL Server…
关系型数据库全都是表
非关系型数据库(NoSQL): MongoDB Redis…
键值对数据库
文档数据库MongoDB
1 ,安装MongoDB 装版本号第二位数字是偶数的版本 ,傻瓜式安装
2 , 配置path 环境变量 到bin目录下 和jdk差不多
3 , 配置好后 cmd打开命令行,执行命令 mongod 会显示一堆东西
4 , 在c盘根目录创建一个data文件夹,今入data文件夹后创建db文件夹
5 ,再次运行mongod 命令后 db文件夹会多出一些东西
6 , MongoDB 默认端口号是27017
注意 :cmd启动数据库的命令是mongod 启动之后 不要关它
数据库启动之后 想要对数据库进行操作 cmd打开新的命令行 输入命令 mongo 就是连接(登录)数据库
这样就可以在这个新打开的命令行窗口执行 MongoDB 的命令了。
MongoDB与MySQL不同 MongoDB分为数据库,集合,文档。每个文档都表示一个对象。数据库里放集合 集合里放文档。
MongoDB的数据库和集合不需要手动的创建
MongoDB的一些基本操作指令
MongoDB的CRUD基本指定
插入数据:首先use 库名; 然后db.集合名.insert(需要插入的数据)
查询集合的所有数据:首先use库名;然后db.集合名.find();
插入文档到集合
当我们插入数据时不指定_id 时会自动生成一个由机器码和时间戳生成的_id值 它生成的id值是唯一的 所以我们建议 一般就用它的自动生成_id值
insertOne()和insertMany() 是insert()的拆分版 可读性强。
insertOne()只能插入一个
insertMany() 必须插入多个(必须是数组)
find()括号内可以填条件{id:xxx,age:xxx}
修改文档 update(查询条件,新对象)
注意新对象如果不是要替换整个文档 那么要用$set来修改指定属性
删除文档,或删除集合
练习示例
for循环直接20000次操作数据库 性能差
用个数组接收 然后一次insert插入 就可以快差不多18倍(更多)
比较查询
分割
以下是黑马程序员视频摘取的记录
整合MongoDB整合idea项目
首先 看看它的pom文件
配置文件yml 注意主机地址 看看自己主机地址是多少 参考之前的项目
配置好后 运行springboot工程 试一下能不能连接到MongoDB数据库
编写实体类 字段和mysql一样 一一对应 但是注意 MongoDB是文档类型的数据 需要在实体类上添加注解@ Document(collection=“集合名”) 这个参数类似MyBatis-plus的@TableName(“表名”)
Mongodb 不需要提前制作好表 只需要提前建好数据库即可
但是提前建好表 列中会出现 _class 的多于列 不过我们只需要加入Mongodb的配置 就可以插入数据时取消这个多余的列
package com.ms.qygqt.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.convert.MongoConverter;
@Configuration
public class MongoConfig implements ApplicationListener<ContextRefreshedEvent> {
@Autowired
MongoTemplate mongoTemplate;
/**
* 插入的时候去掉多余的 _class 字段
*/
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
MongoConverter converter = mongoTemplate.getConverter();
if (converter.getTypeMapper().isTypeKey("_class")) {
((MappingMongoConverter) converter).setTypeMapper(new DefaultMongoTypeMapper(null));
}
}
}
实体类 表中不存在
package com.ms.qygqt.dao;
import java.io.Serializable;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import lombok.Data;
@Document(collection="pouds")
@Data
public class Pouds implements Serializable{
@Id
private String id;
private String name;
private String sex;
}
接口
package com.ms.qygqt.dao;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface PoudsDao extends MongoRepository<Pouds, String>{
}
service层
package com.ms.qygqt.service.impl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ms.qygqt.dao.Pouds;
import com.ms.qygqt.dao.PoudsDao;
import lombok.val;
@Service
public class PoudsServiceImp {
@Autowired
private PoudsDao dao;
public void addpo(Pouds po) {
dao.insert(po);
}
}
controller层
package com.ms.qygqt.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ms.qygqt.dao.Pouds;
import com.ms.qygqt.service.impl.PoudsServiceImp;
@RestController
public class PoudsController {
@Autowired
private PoudsServiceImp imp;
@PostMapping
public String addpo(Pouds po) {
imp.addpo(po);
return "成功";
}
}
启动类
package com.ms.qygqt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})
public class MsQygqtServerApplication {
public static void main(String[] args) {
SpringApplication.run(MsQygqtServerApplication.class, args);
}
}
mongodb的按条件查询 带分页
/**
* 查询后台账号角色 带分页pageNum从第0开始
* @param pageNum
* @param pageSize
* @return
*/
public Map<String, Object> pageAdminUserRole(Integer pageNum, Integer pageSize) {
// if (pageNum==0) {pageNum=pageNum+1;}
PageRequest page = PageRequest.of( pageNum,
pageSize
,Sort.by(Direction.DESC, "rid"));
Page<AdminUserRole> findAll = adminUserRoleDao.findAll(page);
List<PageAdminUserPermissionLevelDTO> listdto=new ArrayList<>();
List<AdminUserRole> content = findAll.getContent();
for (AdminUserRole role : findAll) {
PageAdminUserPermissionLevelDTO dto=new PageAdminUserPermissionLevelDTO();
dto.setName(role.getName());
dto.setPmList(this.parsePmList(role.getPm()));
dto.setRid(role.getRid());
listdto.add(dto);
}
Map<String, Object> map=new HashMap<>();
map.put("total", listdto.size());
map.put("rows", listdto);
return map;
}
/**
* 分页查询用户登录日志
* @param uuid
* @param pageNum
* @param pageSize
* @return map 封装了size 和rows
*/
public Map<String, Object> getPageLogInfo(String uuid, Integer pageNum, Integer pageSize) {
PageRequest page = PageRequest.of(pageNum,pageSize);
System.out.println(uuid);
Query query=new Query();
query.with(page);
query.addCriteria(Criteria.where("uuid").is(uuid));
List<AdminUserLog> resultList = mongoTemplate.find(query, AdminUserLog.class);
List<AdminUserLogInfoDTO> listdto=new ArrayList<>();
for (AdminUserLog adminUserLog : resultList) {
AdminUserLogInfoDTO dto=new AdminUserLogInfoDTO();
dto.setCreateTime(adminUserLog.getCreateTime());
dto.setIp(adminUserLog.getIp());
dto.setLocation(adminUserLog.getLocation());
listdto.add(dto);
}
Map<String, Object> map=new HashMap<>();
map.put("total", listdto.size());
map.put("rows", listdto);
return map;
}
/**
* 查询后台账号 带分页
* @param filter
* @param pageNum
* @param pageSize
* @return
*/
public List<PageAdminUserDTO> pageAdminUser( Integer filter, Integer pageNum, Integer pageSize) {
PageRequest page = PageRequest.of(pageNum,pageSize);//,Sort.by(Direction.DESC, "_id")
Query query=new Query();
query.with(page);
if (Integer.valueOf(1).equals(filter)) {
query.addCriteria(Criteria.where("status").is(AdminUserEnum.Status.ON.name()));
} else if (Integer.valueOf(2).equals(filter)) {
query.addCriteria(Criteria.where("status").is( AdminUserEnum.Status.OFF.name()));
} else {
query.addCriteria(Criteria.where("status").in(AdminUserEnum.Status.ON.name(), AdminUserEnum.Status.OFF.name()));
}
List<AdminUser> list = mongoTemplate.find(query, AdminUser.class);
if (null==list) {
return null;
}
List<PageAdminUserDTO> listdto=new ArrayList<>();
String ip=null;
String timeDate=null;
for (AdminUser user : list) {
PageAdminUserDTO dto=new PageAdminUserDTO();
if (null==ip && null==timeDate) {
List<AdminUserLog> findByUuid = adminUserLogDao.findByUuid(user.getUuid());
for (int i = 0; i <findByUuid.size(); i++) {
ip=findByUuid.get(i).getIp();
timeDate = findByUuid.get(i).getUpdatedTime();
break;
}
}
dto.setAccount(user.getAccount());
dto.setIp(ip);
dto.setLastLogin(timeDate);//adminUserLogDao.findByUuid(user.getUuid()).getUpdatedTime()
dto.setPmLevel(user.getRoleName());
dto.setRemark(user.getRemark());
dto.setRid(user.getRoleId());
dto.setStatus(user.getStatus());
dto.setUuid(user.getUuid());
listdto.add(dto);
}
return listdto;
}