Mongodb:是一个nosql的数据库的一种数据库,他是介于关系型数据库与非关系型数据库之间的一种数据库,也可以理解为它是介于Redis与Mysql之间的一种数据库。它是由大数据时代的3V,与互联网需求的三高而产生出来的。
3V:海量Volume ,多样Variety ,实时Velocity
高并发,高可扩,高性能
拉取镜像
docker pull mongo
创建容器
docker run -di --name mongo-service --restart=always -p 27017:27017 -v ~/data/mongodata:/data mongo
id 系统会自动加一个
时间戳+机器码 生成
新增一条 db.userinfo.insert({name:"贾宝玉",age:25,gander:"男",address:'贾府'}) 新增多条 db.userinfo.insert([{name:,address:} ,{name:"林黛玉",age:16,gander:"女",address:'林府'}]) 可不可以快速插入10条数据 for(var i=1;i<=10;i++) { "clay"+i,age:i}) }
查询所有的数据 db.集合名称.find({}) 查询top条数 db.集合名称.find({}).limit(条数) 条件查询 db.userinfo.find({name:"clay1",age:1},{name:1,_id:0})
分页排序
db.c1.insert({_id:1,name:"a",sex:1,age:1}) db.c1.insert({_id:2,name:,sex:1,age:2}) db.c1.insert({_id:3,name:"b",sex:2,age:3}) db.c1.insert({_id:4,name:"c",sex:2,age:4}) db.c1.insert({_id:5,name:"d",sex:2,age:5}) db.c1.find() 正序 db.c1.find({}).sort({age:1}) 降序 db.c1.find({}).sort({age:-1}) 分页查询 跳过两条查询两条 db.c1.find({}).sort({age:1}).skip(2).limit(2)
运算符
//年龄大于1 db.c1.find({age:{$gt:1}}) //年龄是 3,4,5的 $in:[3,4,5]}})
db.集合名.update(条件, 新数据) {修改器: {键:值}}
准备数据 db.c1.insert({name:"8888",age:1,addr:'address',flag:true}) db.c1.update({name:}, {name:"99"}) }, { $set:{name: "zs44"}, $inc:{age:10}, $rename:{addr:"address"} , $unset:{flag:""} } ) db.c1.find({name:})
//全部移除 db.userinfo.deleteMany({}) db.userinfo.deleteMany({age:1})
第一:mongo依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
第二:mongo配置
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; }
现在配置好了,那么怎么用那在项目中?
这里有个简单的查询案例:
1).注入MongoTemplate
类
2).查询
// 查询搜索记录 Query query=new Query(Criteria .where("userId").is(userId) .and("keyword").is(keyword)); ApUserSearch templateOne = mongoTemplate.findOne(query, ApUserSearch.class);
查询数据库中与传入参数一样的数据,返回结果获取对象
那么,我现在想把查询出来的结果按照创建时间排序,怎么实现那?
1).先把查询条件加上
Query query1 = new Query(Criteria.where("userId").is(userId));
2).接下来用with
来实现将数据排序
query1.with(Sort.by(Sort.Order.desc("createdTime"))); List<ApUserSearch> searches = mongoTemplate.find(query1, ApUserSearch.class);
现在就是按时间进行的逆序排序结果了
现在我想把数据库中的一条记录替换掉,怎么实现?
1).调用 mongoTemplatede 的 findAndReplace
方法
mongoTemplate.findAndReplace(query2,apUserSearch);
注:前面跟的是查询条件,后面跟的是要替换的数据
2).query2的查询条件
Query query2 = Query.query(Criteria .where("id").is(userSearch.getId()));
注:获取数据库里与传入Id相同的数据
注:如果没有数据会新增,如果存在会覆盖旧数据
mongoTemplate.save(apUserSearch);
注:这里涉及到正则,详情请参考官方
1).模仿百度搜索
这里可以自己创建一个库,专门用来检索关键字的,最后目的是根据输入框输入的信息,返回给前端一个集合
2).语法
Query query=new Query( Criteria .where("associateWords") .regex("^"+userSearchDto.getSearchWords()+".*"));
注:模糊关键字regex
,该字段 associateWords 与过来的信息进行模糊匹配
模糊查询后,我想加个条件,最多页面显示十条,怎么实现?
1).代码:
query.limit(10);
注:每十条进行分页
2).结果
List<ApAssociateWords> apAssociateWords = mongoTemplate.find(query, ApAssociateWords.class);
注:这样就获取到了模糊匹配的分页集合了
注:这里还有很多方法,回头再研究