mongodb三分钟入门大全

目录
  • 一、MongoDB是什么
    • 1、维基百科
    • 2、简而言之
  • 二、MongoDB 的应用场景
    • 1、MongoDB事务
    • 2、多引擎支持各种强大的索引需求
    • 3、具体的应用场景
    • 4、以下是几个实际的应用案例:
    • 5、选择MongoDB的场景总结:
  • 三、MongoDB对比MySQL
    • 1、关键字对比
  • 四、SpringBoot整合MongoDB实现增删改查
    • 1、引入pom
    • 2、启动类Application
    • 3、实体类
    • 4、UserRepository
    • 5、业务层service
    • 6、测试类
    • 7、插入
    • 8、更新
    • 9、查询

一、MongoDB是什么

1、维基百科

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

2、简而言之

MongoDB是文档型的NoSQL数据库,数据以文档(对应关系型数据库的记录)的形式在MongoDB中保存,文档实际上就是一个个JSON字符串,使用JSON的好处是非常直观,通过一系列的Key-Value键值对来表示数据,符合我们的阅读习惯。
在Java、Python中对JSON都有很好的支持,数据从MongoDB中读取出来后,可无需转换直接使用;支持丰富的数据结构,Value可以是普通的整型、字符串、数组、嵌套的子文档,使用嵌套的好处是在MongoDB中仅需一次简单的查询就能够获取到你所需的数据。

二、MongoDB 的应用场景

1、MongoDB事务

MongoDB目前只支持单文档事务,MongoDB暂时不适合需要复杂事务的场景。
灵活的文档模型JSON格式存储最接近真实对象模型,对开发者友好,方便快速开发迭代,可用复制集满足数据高可靠、高可用的需求,运维较为简单、故障自动切换可扩展分片集群海量数据存储。

2、多引擎支持各种强大的索引需求

  • 支持地理位置索引
  • 可用于构建各种O2O应用
  • 文本索引解决搜索的需求
  • TTL索引解决历史数据过期的需求
  • Gridfs解决文件存储的需求
  • aggregation & mapreduce解决数据分析场景需求,可以自己写查询语句或脚本,将请求分发到 MongoDB 上完成。

3、具体的应用场景

传统的关系型数据库在解决三高问题上的力不从心。
何为三高?

  • High performance - 对数据库高并发读写的需求。
  • Huge Storage - 对海量数据的高效率存储和访问的需求。
  • High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。
  • MongoDB可以完美解决三高问题。

4、以下是几个实际的应用案例:

(1)游戏场景
使用MongoDB存储游戏用户信息、装备、积分等,直接以内嵌文档的形式存储,方便查询、更新。
(2)物流场景
使用MongoDB存储订单信息、订单状态、物流信息,订单状态在运送过程中飞速迭代、以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更查出来,牛逼plus。
(3)社交场景
使用MongoDB存储用户信息,朋友圈信息,通过地理位置索引实现附近的人、定位功能。
(4)物联网场景
使用MongoDB存储设备信息、设备汇报的日志信息、并对这些信息进行多维度分析。
(5)视频直播
使用MongoDB存储用户信息、点赞互动信息。

5、选择MongoDB的场景总结:

  • 数据量大
  • 读写操作频繁
  • 数据价值较低,对事务要求不高

三、MongoDB对比MySQL

1、关键字对比

MySQL MongoDB 解释说明
database database 数据库
table collection 表/集合
row document 行/文档
column field 字段/域
index index 索引
join 嵌入文档 表关联/MongoDB不支持join,MongoDB通过嵌入式文档来替代多表连接
primary key primary key 主键/MongoDB自动将_id字段设置为主键

四、SpringBoot整合MongoDB实现增删改查

1、引入pom

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>MongoDBProject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
        <relativePath/>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
    </dependencies>
</project>

2、启动类Application

package com.guor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

3、实体类

package com.guor;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}package com.guor.bean;
import org.springframework.data.annotation.Id;
import java.io.Serializable;
public class User implements Serializable {
    @Id
    private String id;//主键
    //该属性对应mongodb的字段的名字,如果一致,则无需该注解
    private String name;
    private Integer age;
    private String phone;
    private String parentid;//上级ID
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getParentid() {
        return parentid;
    }
    public void setParentid(String parentid) {
        this.parentid = parentid;
    }
    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", phone='" + phone + '\'' +
                ", parentid='" + parentid + '\'' +
                '}';
    }
}

4、UserRepository

package com.guor.dao;
import com.guor.bean.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface UserRepository extends MongoRepository<User,String> {
    Page<User> getPageByid(String parentId, Pageable pageable);
}

5、业务层service

package com.guor.service;
import com.guor.bean.User;
import com.guor.dao.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;
    public void insertUser(User user){
        userRepository.save(user);
    }
    public void updateUser(User user){
        userRepository.save(user);
    }
    public void deleteUserById(String id){
        userRepository.deleteById(id);
    }
    public List<User> getAllUser(){
        return userRepository.findAll();
    }
    /**
     * 根据id查询评论
     */
    public User getUserById(String id){
        return userRepository.findById(id).get();
    }
	/**
	* 分页
	*/
    public Page<User> getPageByid(String parentId, int page , int size){
        return userRepository.getPageByid(parentId, PageRequest.of(page-1,size));
    }
}

6、测试类

package com.guor;
import com.guor.bean.User;
import com.guor.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class MongoDBTest {
    @Autowired
    private UserService userService;
    @Test
    public void saveUser(){
        User user=new User();
        user.setName("比比东");
        user.setAge(22);
        user.setPhone("1314");
        userService.insertUser(user);
    }
    @Test
    public void getUser(){
        List<User> list = userService.getAllUser();
        for(User user : list){
            System.out.println(user);
        }
    }
    @Test
    public void updateUser(){
        User user=new User();
        user.setId("61e3d9ac57b3da05fd0fffed");
        user.setName("云韵");
        user.setAge(29);
        user.setPhone("18525351592");
        user.setParentid("1");
        userService.updateUser(user);
    }
    @Test
    public void getUserPage(){
        Page<User> pageResponse = userService.getPageByid("1",1, 2);
        System.out.println("----总记录数:"+pageResponse.getTotalElements());
        System.out.println("----当前页数据:"+pageResponse.getContent());
    }

    @Test
    public void deleteUser(){
        String id = "61e3daf31faa1f5b0e6849f8";
        userService.deleteUserById(id);
    }
}

7、插入

8、更新

9、查询

到此这篇关于mongodb三分钟入门大全的文章就介绍到这了,更多相关mongodb入门内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • mongodb数据库入门学习笔记之下载、安装、启动、连接操作解析

    本文实例讲述了mongodb数据库下载.安装.启动.连接操作.分享给大家供大家参考,具体如下: 简介: MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 1.下载 从官网下载压缩包, 官网地址:https://www.mongodb.com/download-center/v2/community. 下载命

  • mongodb数据库入门之CURD简单操作示例

    本文实例讲述了mongodb数据库入门之CURD简单操作.分享给大家供大家参考,具体如下: 查看所有数据库 show dbs; show databases; #有些版本可能不行 使用数据库 use 数据库名 查看集合(集合即mysql的表) show tables/collections 查看帮助 db.help() 创建库 MongoDB的库是隐式创建的,可以use一个不存在的库, 然后在该库下创建colletion即可以创建库. 删除数据库 db.dropDatabase(); 创建集合

  • NodeJS中的MongoDB快速入门详细教程

    MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 一.MongoDB必须理解的概念 1.数据库:每个数据库都有自己的权限和集合. 2.文档:一个键值对. 3.集合:一组文档,即一组键值对.当第一个文档插入时,集合就会被创建. 二.Mac下的MongoDB安装和启动 1.使用brew进行安装:brew ins

  • mongodb基础入门_动力节点Java学院整理

    关于mongodb的好处,优点之类的这里就不说了,唯一要讲的一点就是mongodb中有三元素:数据库,集合,文档,其中"集合" 就是对应关系数据库中的"表","文档"对应"行". 一: 下载 上MongoDB官网,我们发现有32bit和64bit,这个就要看你系统了,不过这里有两点注意: ①:根据业界规则,偶数为"稳定版"(如:1.6.X,1.8.X),奇数为"开发版"(如:1.7.X,

  • MongoDB基础入门之创建、删除集合操作

    创建集合 语法格式 db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean>, size: <number>, max <number>}) 参数说明 name: 要创建的集合的名称 options: 可选参数,指定有关内存大小及索引的选项 options参数说明 参数名 参数类型 参数说明 capped 布尔 如果为 true,则创建固定集合.默认为不启用<br />

  • mongodb三分钟入门大全

    目录 一.MongoDB是什么 1.维基百科 2.简而言之 二.MongoDB 的应用场景 1.MongoDB事务 2.多引擎支持各种强大的索引需求 3.具体的应用场景 4.以下是几个实际的应用案例: 5.选择MongoDB的场景总结: 三.MongoDB对比MySQL 1.关键字对比 四.SpringBoot整合MongoDB实现增删改查 1.引入pom 2.启动类Application 3.实体类 4.UserRepository 5.业务层service 6.测试类 7.插入 8.更新 9

  • Kotlin 编程三分钟入门

    为什么使用Kotlin 项目一期在收尾了终于有时间折腾了,一个多月以来Kotlin从入门到现在,坚持用来开发的切身感受.因为语法与Java的区别挺大的一开始很想放弃,如果不是因为项目在使用,想必很少人会尝试这样一门小众语言,但是习惯后会发现这些年究竟浪费多少时间在写无用的Java代码了,Kotlin在兼容Java的基础上还能大大提升开发效率.Kotlin有许多特性但对于开发来说,快速适应和学习更为重要,很多时候我们都是在不明白其原因就开始使用的,正如我们不可能把Retrofit原理研究透才使用它

  • Cython 三分钟入门教程

    作者:perrygeo译者:赖勇浩(http://laiyonghao.com)原文:http://www.perrygeo.net/wordpress/?p=116 我最喜欢的是Python,它的代码优雅而实用,可惜纯粹从速度上来看它比大多数语言都要慢.大多数人也认为的速度和易于使用是两极对立的--编写C代码的确非常痛苦.而 Cython 试图消除这种两重性,并让你同时拥有 Python 的语法和 C 数据类型和函数--它们两个都是世界上最好的.请记住,我绝不是我在这方面的专家,这是我的第一次

  • spring boot整合redis实现RedisTemplate三分钟快速入门

    引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> RedisTemplate五种数据结构的操作 redisTemplate.opsForValue(); //操作字符串 redisTemplate.opsForHash();

  • HTML 30分钟入门教程

    运行下面的代码就可以了 HTML 30分钟入门教程 h1 {text-align:center} p {text-indent:2em; line-height:140%; margin:auto 10px} span {margin:3px} .code { border:solid 1px gray; background-color:#eee} .name { font-weight:bold } dl {margin-left:20px} dt {font-weight:bold} .t

  • 正则表达式30分钟入门教程 v2.1版

    运行下面的代码就可以看到 正则表达式30分钟入门教程 h1 {text-align:center} p {text-indent:2em; line-height:140%; margin:auto 10px} span {margin:3px} table {margin:auto; border-style:solid; border-width:1px 1px 0 0; border-color:gray} td, th {border-style:solid; border-width:

  • 30分钟入门Java8之默认方法和静态接口方法学习

    前言 上一篇文章30分钟入门Java8之lambda表达式,我们学习了lambda表达式.现在继续Java8新语言特性的学习,今天,我们要学习的是默认方法和静态接口方法. 这一Java8的新语言特性,在Android N中也得到了支持.至于如何在Android开发中配置Java8的开发环境,请查看上一篇文章30分钟入门Java8之lambda表达式. 默认方法 默认方法让我们能给我们的软件库的接口增加新的方法,并且能保证对使用这个接口的老版本代码的兼容性. 下面通过一个简单的例子来深入理解下默认

  • Spring Security十分钟入门教程

    目录 写在前面 目标 开始 不引入Spring Security访问接口 引入Spring Security访问接口 退出登录 后记 写在前面 我们在学习技术的过程中,学习的渠道大概有以下几种:看书,视频,博客.我们会发现,一种技术开始流行的时候,各种形式的讲述也就出现了.那么,出书,录视频,写博客的人,在他们之前,是没有什么现成的东西让他们学习的,他们是怎么上手的呢?换句话说,怎么才能有效的快速的上手一门技术呢? 这篇文章,我们一起从零开始学习SpringSecurity,技术点不重要,重要的

  • AngularJs 60分钟入门基础教程

    AngularJs是一个不错的用于开发SPA应用(单页Web应用)的框架.单页Web应用(single page web application,SPA),就是只有一张Web页面的应用.浏览器一开始会加载必需的HTML.CSS和JavaScript,所有的操作都在这张页面上完成,由JavaScript来控制不同view在这个页面上的呈现.本文源于Youtube上一个不错的AngularJs的入门教程视频:AngularJS Fundamentals In 60-ish Minutes,主要讲解了

  • [图文]三分钟学会Sql Server的复制功能

    根据网络情况,可能达到10秒左右的延时,即主数据库添加,删除,更新的内容,一般在10秒内就可以同步到备用数据库上. 三分钟的视频操作演示在最下面,不要忘记看了. 1.配置分布发服务器 2.新建发布 3.这里介绍事务发布 4.选择要发布的表,注意:只有带主键的表才可以发布 5.这是个问题,因为很多表中,我们会有这个自动编号的功能,不过你可以自己修改存储过程来实现这个功能. 加上用到 SET IDENTITY_INSERT xxxtable ON的功能 6.发布建好后,我们有强制新订阅来发布,如果要

随机推荐