app端——搜索记录mongoDB
一、需求说明
展示用户的搜索记录10条,按照搜索关键词的时间倒序
可以删除搜索记录
保存历史记录,保存10条,多余的则删除最久的历史记录
二、数据存储说明
用户的搜索记录,需要给每一个用户都保存一份,数据量较大,要求加载速度快,通常这样的数据存储到mongodb更合适,不建议直接存储到关系型数据库中
mongoDB:高性能、高存储、数据具有结构性
三、安装mongoDB
拉取镜像:docker pull mongo
创建容器:docker run -di --name mongo-service --restart=always -p 27017:27017 -v ~/data/mongodata:/data mongo
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
server: port: 9998 spring: data: mongodb: host: 192.168.200.130 port: 27017 database: leadnews-history
映射
package com.itheima.mongo.pojo; import lombok.Data; import org.springframework.data.mongodb.core.mapping.Document; import java.io.Serializable; import java.util.Date; /** * <p> * 联想词表 * </p> * * @author itheima */ @Data @Document("ap_associate_words") public class ApAssociateWords implements Serializable { private static final long serialVersionUID = 1L; private String id; /** * 联想词 */ private String associateWords; /** * 创建时间 */ private Date createdTime; }
核心方法:
package com.itheima.mongo.test; import com.itheima.mongo.MongoApplication; import com.itheima.mongo.pojo.ApAssociateWords; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.Sort; 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.test.context.junit4.SpringRunner; import java.util.Date; import java.util.List; @SpringBootTest(classes = MongoApplication.class) @RunWith(SpringRunner.class) public class MongoTest { @Autowired private MongoTemplate mongoTemplate; //保存 @Test public void saveTest(){ ApAssociateWords apAssociateWords = new ApAssociateWords(); apAssociateWords.setAssociateWords("黑马头条"); apAssociateWords.setCreatedTime(new Date()); mongoTemplate.save(apAssociateWords); } //查询一个 @Test public void saveFindOne(){ ApAssociateWords apAssociateWords = mongoTemplate.findById("5fc2fc3fb60c9a039c44556e", ApAssociateWords.class); System.out.println(apAssociateWords); } //条件查询 @Test public void testQuery(){ Query query = Query.query(Criteria.where("associateWords").is("黑马头条")) .with(Sort.by(Sort.Direction.DESC,"createdTime")); List<ApAssociateWords> apAssociateWordsList = mongoTemplate.find(query, ApAssociateWords.class); System.out.println(apAssociateWordsList); } @Test public void testDel(){ mongoTemplate.remove(Query.query(Criteria.where("associateWords").is("黑马头条")),ApAssociateWords.class); } }