MongoDB快速入门

1.介绍

Mongodb:是一个nosql的数据库的一种数据库,他是介于关系型数据库与非关系型数据库之间的一种数据库,也可以理解为它是介于Redis与Mysql之间的一种数据库。它是由大数据时代的3V,与互联网需求的三高而产生出来的。

3V:海量Volume ,多样Variety ,实时Velocity

高并发,高可扩,高性能

1.1.Docker安装MongoDB

拉取镜像

docker pull mongo

创建容器

docker run -di --name mongo-service --restart=always -p 27017:27017 -v ~/data/mongodata:/data mongo

2.Mongodb增删改查(CURD)

id 系统会自动加一个

时间戳+机器码 生成

2.1. 增(insert)

新增一条
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})
}

2.2. 查(find)

查询所有的数据
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]}})

2.3. 改(update)

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:})

2.4. 删(delete)

//全部移除
db.userinfo.deleteMany({})
db.userinfo.deleteMany({age:1})

3.集成SpringBoot

3.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;

}

3.2.基本操作

现在配置好了,那么怎么用那在项目中?

3.2.1.查询

这里有个简单的查询案例:

1).注入MongoTemplate

2).查询

//        查询搜索记录
        Query query=new Query(Criteria
                .where("userId").is(userId)
                .and("keyword").is(keyword));

        ApUserSearch templateOne = mongoTemplate.findOne(query, ApUserSearch.class);

查询数据库中与传入参数一样的数据,返回结果获取对象

3.2.2.排序

那么,我现在想把查询出来的结果按照创建时间排序,怎么实现那?

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);

现在就是按时间进行的逆序排序结果了

3.2.3.替换

现在我想把数据库中的一条记录替换掉,怎么实现?

1).调用 mongoTemplatedefindAndReplace方法

mongoTemplate.findAndReplace(query2,apUserSearch);

注:前面跟的是查询条件,后面跟的是要替换的数据

2).query2的查询条件

Query query2 = Query.query(Criteria
                        .where("id").is(userSearch.getId()));

注:获取数据库里与传入Id相同的数据

3.2.4.新增

注:如果没有数据会新增,如果存在会覆盖旧数据

mongoTemplate.save(apUserSearch);
3.2.4.模糊匹配

注:这里涉及到正则,详情请参考官方

1).模仿百度搜索

这里可以自己创建一个库,专门用来检索关键字的,最后目的是根据输入框输入的信息,返回给前端一个集合

2).语法

  Query query=new Query(
  Criteria
 .where("associateWords")
 .regex("^"+userSearchDto.getSearchWords()+".*"));

注:模糊关键字regex,该字段 associateWords 与过来的信息进行模糊匹配

3.2.5.分页

模糊查询后,我想加个条件,最多页面显示十条,怎么实现?

1).代码:

 query.limit(10);

注:每十条进行分页

2).结果

List<ApAssociateWords> apAssociateWords = mongoTemplate.find(query, ApAssociateWords.class);

注:这样就获取到了模糊匹配的分页集合了

3.2.6.小记

注:这里还有很多方法,回头再研究

posted @ 2022-08-12 21:20  你会很厉害的  阅读(195)  评论(0编辑  收藏  举报
//雪花飘落效果