这些应用场景中,数据操作方面的共同特点是:
对于这样的数据,我们更适合使用 MongoDB来实现数据的存储。
SQL术语 | MongoDB术语 |
---|---|
database | database |
table | collection |
row | document |
column | field |
官网下载,选择msi的形式下载文件
双击打开,选择Custom 自定义安装目录比如说D
,选择自己想要的地址,一直next就行了在最后的页面,安装 "Install MongoDB Compass" 不勾选,否则可能要很长时间都一直在执行安装
官网下载,选择zip的形式下载文件,解压到本地
进入解压后的文件夹,和bin目录同级下创建data和logs文件夹
打开cmd控制台以管理员模式进入这个文件夹的bin目录,启动命令来指定mongdb的数据及日志目录
mongod --install --dbpath D:\MongoDB\mongodb-win32-x86_64-windows-7.0.4\data --logpath D:\MongoDB\mongodb-win32-x86_64-windows-7.0.4\logs\mongodb.log
如果没有报错信息说明命令执行成功,win+r输入services.msc,进入windows服务查看有没有MongoBD服务,有服务就显示成功
再运行启动服务命令
net start mongodb
会显示服务启动成功
输入http://localhost:27017/ 看到一下内容说明服务启动正常
It looks like you are trying to access MongoDB over HTTP on the native driver port.
管理服务的其他语法
mongod --install --dbpath 数据目录 --logpath 日志目录\日志名称 #创建服务 mongod --remove #卸载服务 net start mongodb #启动服务 net stop mongodb #关闭服务 mongod #是处理MongoDB系统的主要进程。它处理数据请求,管理数据存储,和执行后台管理操作。当我们运行mongod命令意味着正在启动MongoDB进程,并且在后台运行。
官网下载 点击Download下载即可,下载完成后得到压缩包,双击运行exe文件
点击connect链接,上面是默认链接地址端口
登录成功后点击+号新建数据库和表 到此基础工作准备完成
解压到需要的文件夹,进入bin目录双击mongosh.exe即可启动,就能运行mongo命令 比如说增加超级管理账号,数据库账号等等功能
pom<!--集成mongodb--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
ymlspring:
data:
mongodb:
host: 127.0.0.1
port: 27017
database: test
首先需求目的是改造字典检索,原来的字典检索是通过用户的输入码,拼成redis的key,如果key有值就返回,没有值就查询数据库,并添加到redis中,原来的情况有两种问题首先就是字典内容很多,容易产生大key,其次就是用输入码拼接的方式产生的key,由于用户输入内容变动很大,所以redis经常会穿透,所以我们进行改造将redis的方式改为mongodb检索
首先创建一个mongo实体对象
java
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
@Data
@NoArgsConstructor//无参构造
@AllArgsConstructor//全参构造
@Document(collection = "diagnosis_dict")//Document注解表明对应了MongoDB中的表。
public class MgDictEntity {
@ApiModelProperty(value="序号")
@Id
private Long id;
@ApiModelProperty(value="编码")
@Field("code")
private String code;
@ApiModelProperty(value="名称")
@Field("name")
private String name;
@ApiModelProperty(value="助记词输入码")
@Field("input_code")
private String inputCode;
}
编写mongoDB服务接口继承MongoRepository 在这个接口里编写一个模糊查询code\name \inputCode的接口,使用时直接调用接口
java
import com.ewell.medqc.rec.entity.MgDiagDictEntity;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;
import java.util.List;
public interface IMongoDbService extends MongoRepository<MgDictEntity, String> {
@Query("{\"$or\": [{code: /?0/},{name: /?0/},{input_code:/?0/}]}")
List<MgDictEntity> findByCodeOrNameOrInputCodeRegex(String input);
}
或者直接使用MongoTemplate,使用Query条件构造器编写查询条件,表达含义和上面一样
java
Query query=new Query();
query.addCriteria(new Criteria().orOperator(
Criteria.where("code").regex(request.getInputCode()),
Criteria.where("name").regex(request.getInputCode()),
Criteria.where("input_code").regex(request.getInputCode())
));
//增加排序
Sort sort=null;
if ("asc".equals(dir)){
List<Sort.Order> orders =new ArrayList<>();
orders.add(new Sort.Order( Sort.Direction.ASC,colum));
sort=Sort.by(orders);
}else if ("desc".equals(dir)){
List<Sort.Order> orders =new ArrayList<>();
orders.add(new Sort.Order( Sort.Direction.DESC,colum));
sort=Sort.by(orders);
}
query.with(sort);
query.limit(500);
List<MgDictEntity> list=mongoTemplate.find(query,MgDictEntity.class);
return list;
编写一个Runner,实现的目的是服务启动时,清除历史数据,装载最新的字典数据到MongoDB中。
java
@Component
public class AutoLoadDictRunner implements CommandLineRunner {
Logger logger = LoggerFactory.getLogger(this.getClass());
@Resource
private MongoTemplate mongoTemplate;
@Resource
private IDictService iDictService;
@Override
public void run(String... args) throws Exception {
logger.info("程序启动自动加载字典数据进入mongodb中---------");
delectAllMongoDBDict("diagnosis_dict");
List<DictEntity> dicts=iDictService.list();
try {
List<MgDictEntity> List = BeanUtil.copyToList(dicts, DictEntity.class);
mongoTemplate.insert(list,MgDictEntity.class);
} catch (Exception e) {
e.printStackTrace();
logger.info("mongodb加载诊断字典数据出错-----------");
return;
}
logger.info("mongodb成功加载诊断字典数据---------");
}
public void delectAllMongoDBDict(String dict){
if (mongoTemplate.collectionExists(dict)) {
logger.info("清空集合:"+dict);
mongoTemplate.dropCollection(dict);
}else {
mongoTemplate.createCollection(dict);
}
}
}
进阶一点就是把redis和mongodb结合起来,如果不输入内容默认返回值从redis返回,有输入值就通过mongodb查询
本文作者:Weee
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!