ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MongoDB快速入门

2022-08-12 21:31:32  阅读:175  来源: 互联网

标签:入门 MongoDB age db 查询 c1 快速 find name


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.小记

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

标签:入门,MongoDB,age,db,查询,c1,快速,find,name
来源: https://www.cnblogs.com/sy2022/p/16581397.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有