Bootstrap

MongoDB基础增删改查总数分页语法,集成springBoot,MongoTemplate在系统的使用

1.基本概念

mongodb中基本的概念是文档、集合、数据库:
在这里插入图片描述
Sql中数据库一行数据对应数据库文档:
在这里插入图片描述

2.数据库

一个mongodb中可以建立多个数据库。
MongoDB的默认数据库为"db",该数据库存储在data目录中。
MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。
"show dbs" 命令可以显示所有数据的列表

3.MongoDB 数据类型

下表为MongoDB中常用的几种数据类型:
在这里插入图片描述

4.操作文档基本语法

操作文档语法: 数据库.集合.语句({})
4.1插入文档(如果没有集合则创建集合)
db.集合名.insert({name:”测试”});
相当于
Insert into 表名(‘name’) values(‘测试’);

在这里插入图片描述

  • 插入集合:db.ygyDemo.insert({“name”: “杨冠宇”,“age”: 23, “phone”: “15531455555”});
4.2修改文档
db.ygyDemo.update({"name": "杨冠宇"},{$set:{"age":18}})
相当于sql:update ygyDemo set age=18 where name=’杨冠宇’
$set用来指定一个键并更新键值,若键不存在则创建
注意:如果存在多条数据,此条语句只会修改第一条发现的数据:

在这里插入图片描述

  • 全部修改需在后面添加multi为true
    在这里插入图片描述
    在这里插入图片描述
4.3修改文档字段
$unset用来删除文档下的字段
语法:db.ygyDemo.update({"name": "杨冠宇"},{$unset:{"phone":1}},{mulit:true})
相当于删除db数据库下ygyDemo表name字段为“杨冠宇”的“phone”字段
db.ygyDemo.update({},{$unset:{"phone":1}},{mulit:true})
不指定条件时,相当于删除整个db数据库下ygyDemo表的“phone”字段

例如:
在这里插入图片描述

  • 集合中有三条name为“杨冠宇”,两条为“杨冠宇1”的,执行$unset之后修改三条
    在这里插入图片描述
    在这里插入图片描述
4.4删除文档
db.ygyDemo.deleteOne({"name":"杨冠宇"})
只删除name为杨冠宇的第一条数据,deleteMany为删除所有
相当于sql:delete from ygyDemo where name = ‘杨冠宇’

在这里插入图片描述

4.5查询文档
db.ygyDemo.find({"name":"杨冠宇"}).pretty();
Pretty();对查询出来的数据进行格式化。

在这里插入图片描述

  • 多个and查询条件用逗号分隔
    -在这里插入图片描述
  • Or语句查询[]内放所有查询条件
  • 在这里插入图片描述
  • 相当于sql:select * from ygyDemo where name=’杨冠宇’ and (phone = ‘15531455555’ or phone = ‘15531455554’);
4.6分页语句
skip跳过指定数量的数据从0开始,limit读取指定数量的数据:
db.ygyDemo.find().skip(1).limit(2);查询第二条开始的2条数据
相当于mySql语句:select * from ygyDemo limit 1,2;

在这里插入图片描述在这里插入图片描述

附:大佬语法学习
在这里插入图片描述在这里插入图片描述

4.7聚合语句
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语   句中的 count(*),

基本语法:db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

count语句:db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

相当于sql:select by_user, count(*) from mycol group by by_user
_id后面参数加$为要分组的字段,num_tutorial后面参数为聚合表达式:

例如:db.ygyDemo.aggregate([{$group : {_id : "name", num_tutorial : {$sum : "$age"}}}])
相当于sql:select name, sum(age) from ygyDemo group by name

在这里插入图片描述

5.集成springboot

springBoot版本:1.5.10.RELEASE
5.1添加maven pom依赖mongodb-plus-spring-boot-starter
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
    <version>2.0.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>com.spring4all</groupId>
    <artifactId>mongodb-plus-spring-boot-starter</artifactId>
    <version>1.0.0.RELEASE</version>
</dependency>

在这里插入图片描述

5.2配置数据库连接:

在这里插入图片描述在这里插入图片描述

5.3在应用主类上增加@EnableMongoPlus注解

在这里插入图片描述

6.MongoTemplate在系统中使用

通过MongoTemplate来调用各种增删改查语句:
6.1新增单条数据:save
tableName:表名;
Params:插入数据;

在这里插入图片描述

6.2新增多条数据insertDBObjectList:
tableName:表名;
dbObjects:数据集合;

在这里插入图片描述

6.3更新一条数据updateFirst:
query:条件;
update:数据;
tableName:表名;

在这里插入图片描述
调用示例:
在这里插入图片描述

6.4更新多条数据updateMulti:
query:条件;
update:数据;
tableName:表名;

在这里插入图片描述
调用示例:
在这里插入图片描述

6.5根据id批量删除deleteByIds:
tableName:表名;
Ids:多条id

在这里插入图片描述

6.7获取总数count:
tableName:表名;
query:条件;

在这里插入图片描述

6.8根据条件查询:getList
tableName:表名;
query:条件;
实体反射赋值:
private void reflectValue(Object obj, DBObject dbObject) {
    Class c = obj.getClass();
    for (String s : dbObject.keySet()) {
        try {
            Field declaredField = c.getDeclaredField(s);
            declaredField.setAccessible(true);
            declaredField.set(obj, dbObject.get(s));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述
调用示例:
在这里插入图片描述
反射赋值:
在这里插入图片描述

6.9分页查询pageMongo:
criteria:查询条件;
tableName:表名;
paramFind:模糊查询字段;
pageNo:开始数;
pageSize:每页显示数;
/**
 * 处理mongodb查询建立regex 模糊查询的query
 *
 * @param paramFind
 * @param query
 */
public void generatorLikeQuery(Map<String, Object> paramFind, Query query) {
    if (paramFind != null && !paramFind.isEmpty()) {
        Iterator<String> iterator = paramFind.keySet().iterator();
        Criteria criteria = new Criteria();
        while (iterator.hasNext()) {
            String next = iterator.next();
            Object value = paramFind.get(next);
            if (value instanceof String) {
                //_ {} $  ^
                value = filterRegex(((String) value));
                query.addCriteria(criteria.where("_id").ne(null)
                    .and(next).regex(Pattern.compile("^.*" + value + ".*$")));
            } else {
                query.addCriteria(criteria.where("_id").ne(null).and(next).is(value));
            }
        }

    }
}

/**
 * 转义正则特殊字符 ($()*+.[]?\^{},|)
 *
 * @param keyword
 * @return
 */
public String filterRegex(String keyword) {
    if (StringUtils.isNotBlank(keyword)) {
        String[] fbsArr = {"\\", "$", "(", ")", "*", "+", ".", "[", "]", "?", "^", "{", "}", "|"};
        for (String key : fbsArr) {
            if (keyword.contains(key)) {
                keyword = keyword.replace(key, "\\" + key);
            }
        }
    }
    return keyword;
}

在这里插入图片描述
构造模糊查询参数:
在这里插入图片描述
在这里插入图片描述

附:参考地址:

https://www.runoob.com/mongodb/mongodb-databases-documents-collections.html

;