MongoDB总结

简单介绍

摘自百度百科大致如下

  • 分布式文件储存数据库

  • 支持的数据结构类似于Json的Bson格式

  • 最佳优点:查询语言非常强大,类似面向对象的查询语言

  • 支持索引等

  • 调侃:是非关系型数据库中功能最丰富、最像关系型数据库的

docker安装

从下载到安装到启动客户端一气呵成:

  • docker search mongo

  • docker pull mongo //下载镜像

  • docker create --name mongodb -p 27017:27017 -v /ninja_data/mongodb:/data/db mongo:latest //创建容器

  • docker start mongodb //启动容器

  • docker exec -it mongodb /bin/bash //进入容器

  • mongo //使用客户端连接mongodb

  • show dbs //查看其下的所有数据库

命令行CRUD

就不一一截图了,过一下了解一下就ok

  • 先把数据库的一些基本命令说明一下

    • show dbs //查看所有的数据库

    • use testdb // mongo中创建数据库通过use选中的方式自动创建数据库

    • show tables或者 show collections //都是查看当前选中数据库下的所有表

    • db.表名.drop() //删除表

    • db.dropDatabases() //删除当前选中的数据库

  • 增加数据

    • 修改数据

      • 修改这里得多记下几笔:

        • 数据修改以以下为模板,方便大家理解

        

  • 删除数据

  • 查询数据

    前面大家应该都看到了一个命令:db.user.find(),这是查询user表下所有数据

    大致格式为:db.user.find([query],[fields]) ,两个参数均为可选

    • 第一个参数:命中的条件,相当于mysql中的where

    • 第二个参数:命中数据后返回的数据字段,相当于mysql中的select *

    db.col.find().pretty() :prett()会将命中的数据格式化显示,有利于浏览

    写两个简单列子,简单阐明一下

      • 常见的运算表达式如:

        • lt :<

        • lte :<=

        • gt :>

        • gte:=>

        • ne :!=

  • 更多的查询语句

mongo索引

索引的作用就不再做多赘述,避免全变扫描带来的低效率的有效解决手段

  • db.user.getIndexes() :查看当前表的索引情况

  • db.user.createIndex({'id':1}) :为字段id 创建索引

  • db.user.dropIndex("id_1") :删除我们刚刚创建的索引,id_1由查看索引信息得到name信息

  • db.user.dropIndexes() :删除除了mongo自带的-id字段外的其他一切索引

  • db.user.createIndex({'age':1, 'id':-1}) :创建联合索引,1表示升序,-1反之

  • db.user.totalIndexSize() :查看缩影大小、单位、字节

mongo执行计划

  • 我们就拿这一条数据来做个测试

    • db.user.find({age:{$lte:25}, id:{$gte:2}}).explain()

    • 我们可以看到在执行计划下部分有个属性:winingPlan,这才是我们看的地方

      • 第一个属性 "stage":" "

        • COLLSCAN:全表扫描

        • IXSCAN:索引扫描

        • FETCH:根据索引去检索文档

        • SHARD_MERGE:合并分片结果

        • IDHACK:针对_id进行查询

SpringBoot整合API

  • SpringBoot对mongo做了整合,下面简单了解一下相关API

  • 这次我分别对两种方式都做了简单的CRUD

  • 第一种方式,也就是我们Spring Data的惯用方式,写接口继承对应接口,按照一定的命名方式自动生成sql,完成简单的单表CRUD

  • 第二中方式,我们引入 MongoTemplate,实现对mongo数据的操作

  • 项目依赖:pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>

<properties>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
  • 项目配置文件:aplication.yml

server:
port:

spring:
application:
name: mongoDemo
data:
mongodb:
uri: mongodb://192.168.0.150:
database: testdb

项目实体类:Person

package com.example.demo.vo;
import lombok.*;
import org.springframework.data.annotation.Id;

@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Person {

@Id
private Integer id;
private String name;
private Integer age;
}

第一种方式:MongoTemplate

  • 代码写的很松散,只为测试用,不要介意

package com.example.demo.Dao;

import com.example.demo.vo.Person;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.springframework.beans.factory.annotation.Autowired;
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.data.mongodb.core.query.Update;
import org.springframework.stereotype.Component;
import java.util.List;

@Component
public class PersonDao {

@Autowired
private MongoTemplate mongoTemplate;

//增加
public void testInsert(Person person){
mongoTemplate.save(person);
System.out.println("保存数据成功");
}

//构建条件查询器根据条件查询
public List<Person> testQueryListByName(String name){
/*构建查询条件*/
Query query = Query.query(Criteria.where("name").is(name));
return mongoTemplate.find(query, Person.class);
}

//分页查询
public List<Person> testQueryPersonListPage(Integer page,Integer size){
Query query = new Query().limit(size).skip((page - 1) * size);
return mongoTemplate.find(query, Person.class);
}

//修改
public UpdateResult updateById(Person person){
Query query = Query.query(Criteria.where("_id").is(person.getId()));
Update update = Update.update("age",person.getAge());
update.set("name", person.getName());
return mongoTemplate.updateFirst(query, update,Person.class);
}

//删除
public DeleteResult testDeleteById(Integer id){
Query query = Query.query(Criteria.where("id").is(id));
return mongoTemplate.remove(query, Person.class);
}

}
  • 第二种方式:extends MongoRepository<Person,Integer>

package com.example.demo;

import com.example.demo.vo.Person;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Component;

@Component
public interface repository extends MongoRepository<Person,Integer> {
}
  • 最后一式两份的

(微服务架构)Security + Oauth2 + Jwt + Zuul解决微服务系统的安全问题的更多相关文章

  1. 【Spring Cloud & Alibaba 实战 | 总结篇】Spring Cloud Gateway + Spring Security OAuth2 + JWT 实现微服务统一认证授权和鉴权

    一. 前言 hi,大家好~ 好久没更文了,期间主要致力于项目的功能升级和问题修复中,经过一年时间的打磨,[有来]终于迎来v2.0版本,相较于v1.x版本主要完善了OAuth2认证授权.鉴权的逻辑,结合 ...

  2. 微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍

    微服务架构学习与思考(10):微服务网关和开源 API 网关01-以 Nginx 为基础的 API 网关详细介绍 一.为什么会有 API Gateway 网关 随着微服务架构的流行,很多公司把原有的单 ...

  3. 从面向服务架构(SOA)学习:微服务时代应该借鉴的5条经验教训

    [编者按]本文作者为 Matt McLarty,通过介绍 SOA 的兴衰变化,总结了微服务应该借鉴的5条经验教训.文章系国内 ITOM 管理平台 OneAPM 编译呈现. SOA 的兴衰变化让我们更了 ...

  4. Spring Security + OAuth2 + JWT 基本使用

    Spring Security + OAuth2 + JWT 基本使用 前面学习了 Spring Security 入门,现在搭配 oauth2 + JWT 进行测试. 1.什么是 OAuth2 OA ...

  5. [Spring Cloud实战 | 第六篇:Spring Cloud Gateway+Spring Security OAuth2+JWT实现微服务统一认证授权

    一. 前言 本篇实战案例基于 youlai-mall 项目.项目使用的是当前主流和最新版本的技术和解决方案,自己不会太多华丽的言辞去描述,只希望能勾起大家对编程的一点喜欢.所以有兴趣的朋友可以进入 g ...

  6. HTTP和RPC是现代微服务架构,HTTP和RPC是现代微服务架构

    .NET Core使用gRPC打造服务间通信基础设施   一.什么是RPC rpc(远程过程调用)是一个古老而新颖的名词,他几乎与http协议同时或更早诞生,也是互联网数据传输过程中非常重要的传输机制 ...

  7. Spring Cloud 学习 (十) Spring Security, OAuth2, JWT

    通过 Spring Security + OAuth2 认证和鉴权,每次请求都需要经过 OAuth Server 验证当前 token 的合法性,并且需要查询该 token 对应的用户权限,在高并发场 ...

  8. spring security oauth2 jwt 认证和资源分离的配置文件(java类配置版)

    最近再学习spring security oauth2.下载了官方的例子sparklr2和tonr2进行学习.但是例子里包含的东西太多,不知道最简单最主要的配置有哪些.所以决定自己尝试搭建简单版本的例 ...

  9. SpringBoot 整合 spring security oauth2 jwt完整示例 附源码

    废话不说直接进入主题(假设您已对spring security.oauth2.jwt技术的了解,不懂的自行搜索了解) 依赖版本 springboot 2.1.5.RELEASE spring-secu ...

随机推荐

  1. ICU lirary DownLoad

    { //https://github.com/unicode-org/icu }

  2. Network基础(一):配置计算机名及工作组、TCP/IP地址配置、网络连通性测试

    一.配置计算机名及工作组 目标: 本例要求为修改计算机名并加入工作组: 设置计算机名:姓名拼音 设置工作组名:TARENA-NETWORK 方案: 修改Windows 2008服务器的计算机名(可设为 ...

  3. BZOJ 1005: [HNOI2008]明明的烦恼(高精度+prufer序)

    传送门 解题思路 看到度数和生成树个树,可以想到\(prufer\)序,而一张规定度数的图的生成树个数为\(\frac{(n-2)!}{\prod\limits_{i=1}^n(d(i)-1)!}\) ...

  4. Selenium之Android使用学习

    20140507 Selenium一般用在web自动化上,为什么Android上也能用呢? 如图,手机端和DB联动:手机端的客户端给server发数据流,进行增删改查操作,这种写数据用update更新 ...

  5. tomcat的stratup小黑框名字修改

    Tomcat的bin目录下:catalina.out文件, TITLE就是Tomcat startup窗口的名称,282行默认是:Tomcat.这里建议改成“服务名+端口号”的方式,看起来一目了然.因 ...

  6. window.open 打开新窗口被拦截的解决方案

    最近公司开发的一个项目,平凡用到下载各种类型的文件,但是例如.txt,.jpg,.pdf格式的文件呢浏览器会在当前窗口直接打开,影响用户体验,尝试各种方案和百度总结一下几点: 原理: 当window. ...

  7. pythy标准库之Tkinter(hello world窗口显示)

    Tkinter :Tkinter,python内置的图形开发库GUI python3.x中: import tkinter #注意不要写成Tkinter, 一.用tkinter创建hello worl ...

  8. 使用Guzzle执行HTTP请求

    Guzzle是一个PHP的HTTP客户端,用来轻而易举地发送请求,并集成到我们的WEB服务上.Guzzle提供了简单的接口,构建查询语句.POST请求.分流上传下载大文件.使用HTTP cookies ...

  9. Hexo next博客的pjax一个Bug引发的关于pjax用法的小技巧-----pjax后图片点击放大的js失效

    文章目录 广告: 背景 发现 解决 get技能 广告: 本人博客地址:https://mmmmmm.me 源码:https://github.com/dataiyangu/dataiyangu.git ...

  10. Pandas数据处理 学习

    pandas是在numpy的基础上建立的新程序库,提供了一种高效的DataFrame数据结构. DataFrame本质上是一种带行标签和列标签.支持相同数据类型和缺失值的多维数组. 先看版本信息: p ...