MongoDB安装及使用

1.介绍

MongoDB是一种开源的文档型数据库管理系统,它使用类似于JSON的BSON格式(Binary JSON)来存储数据。与传统关系型数据库不同,MongoDB不使用表和行的结构,而是采用集合(Collection)(Mysql表)和文档(Document)(MySql行)的概念来组织数据。

MongoDB的主要特点包括:

1. 强大的灵活性:MongoDB的文档模型允许存储不同结构的数据,使用者可以轻松地添加、修改和删除字段,而无需进行复杂的模式迁移。

2. 高性能:MongoDB支持水平扩展,可以实现高并发和大规模的数据处理。它还提供了索引和查询优化等功能,以提高读取和写入的性能。

3. 高可用性:MongoDB支持主从复制和分片的特性,可以实现数据的备份和故障恢复。当主节点出现故障时,系统可以自动切换为备用节点来提供服务。

4. 丰富的查询语言:MongoDB使用类似于SQL的查询语言来进行数据的查询和聚合操作。同时,它还提供了地理空间查询和全文索引等功能,以满足各种复杂的查询需求。

2.使用场景

MongoDB是一种非关系型数据库,适用于许多不同的使用场景。以下是一些常见的MongoDB使用场景:

  1. 网站数据存储

  2. 实时应用:MongoDB 非常适合需要频繁插入、更新和查询的实时应用程序,比如新闻feed、博客、论坛、评论系统等,其快速的写入速度和高效的查询性能有利于应对高并发访问。

  3. 游戏开发

  4. 游戏用户信息:存储玩家账户、角色属性、装备、积分等数据,内嵌文档结构能很好地满足这类复杂且动态变化的数据需求。

  5. 实时数据分析:游戏事件日志、实时排行榜等场景要求数据库具备快速写入和即时查询的能力。

  6. 物流与电商

  7. 订单管理:订单信息、商品库存、交易历史等,MongoDB 对频繁更新的状态跟踪表现优秀。

  8. 用户行为分析:记录并分析用户浏览、购买、搜索等行为数据。

  9. 社交网络

  10. 用户资料与社交关系:存储用户个人信息、好友列表、消息记录等半结构化数据。

  11. 地理位置服务:利用地理空间索引轻松实现附近的用户、地点查找功能。

  12. 物联网(IoT)

  13. 设备数据存储:收集来自各种智能设备的实时或周期性上报的数据,如温度、湿度、状态变化等信息。

  14. 日志记录与分析:处理大量的设备日志数据,进行多维度分析和实时监控。

3.关键名词 

在 MongoDB 中有三个比较重要的名词:数据库集合文档

数据库 (Database)

在 MongoDB 中,数据库是最顶层的逻辑容器,它包含一组集合(collections)。每个 MongoDB 实例可以包含多个数据库,而且数据库之间相互独立,互不影响。

集合 (Collection)

集合类似于关系型数据库中的表,它是 MongoDB 中存储文档的容器。集合中的文档不需要预先定义 schema(模式),也就是说,同一个集合中的文档可以有不同的字段结构。每个集合中的文档都有唯一的 _id 字段作为主键标识符。例如,usersorders 都可以是集合名,它们分别存储用户信息或订单数据。

文档 (Document)

文档是 MongoDB 中的基本数据单元,它对应于关系型数据库中的行。文档是以 BSON(Binary JSON)格式存储的数据结构,类似于 JSON 对象,支持嵌套结构和数组。每个文档包含多个键值对,键为字符串,值可以是各种数据类型,包括其他文档、数组和其他复杂结构。

4.MongoDB 安装

基于Docker安装

docker run --restart=always -d --name mongo -v /opt/mongodb/data:/data/db -p 27017:27017 mongo:4.0.6

客户端工具使用 

MongoDB Compass | MongoDB使用 Compass(MongoDB 的图形界面)探索数据并与之交互。在一个界面中执行查询、修改、删除等操作。icon-default.png?t=N7T8https://www.mongodb.com/zh-cn/products/tools/compass

5.MongoDB 使用 

引用依赖包

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-mongodb</artifactId>

</dependency>

配置文件配置mongodb资料 

# MongoDB连接信息

spring.data.mongodb.host = 192.168.23.27

spring.data.mongodb.port = 27017

spring.data.mongodb.database = mall

spring.data.mongodb.auto-index-creation = true

准备对象Person 

@Document(collection = "person") // 指定集合名称,就是类似mysql的表,如果不指定就以类名称作为集合名称
@Data
public class Person {
    @Id // 文档id, 很重要,类似mysql表的主键
    private Long id;
    private String name;
    private Integer age;
    /**
     * 创建一个10秒之后文档自动删除的索引 结合 spring.data.mongodb.auto-index-creation = true 一起使用
       创建一个10秒之后文档自动删除, 类似 redis ttl
注意:这个字段必须是date类型或者是一个包含date类型值的数组字段,一般我们使用date类型;

     */
    @Indexed(expireAfterSeconds=10)
    private LocalDateTime createTime;
}

新增文档

    /**
     * 插入文档
     */
    @Test
    void insert() {
        Person person =new Person();
        person.setId(20530712L);
        person.setName("张三");
        person.setAge(26);
        mongoTemplate.insert(person);

    }

修改文档 

    /**
     * 更新文档,匹配查询到的文档数据中的第一条数据
     * @throws Exception
     */
    @Test
    public void update1() throws Exception {
     
        //更新条件
        Query query= new Query(Criteria.where("id").is(2));

        //更新值
        Update update= new Update().set("name", person.getName()).set("age", 32);

        //更新查询满足条件的文档数据(第一条)
        UpdateResult result =mongoTemplate.updateFirst(query, update, Person.class);
        System.out.println("更新条数:" + result.getMatchedCount());
    }

删除文档

    /**
     * 删除符合条件的所有文档
     */
    @Test
    public void remove() throws Exception {
      //删除年龄小于18的所有人
        Query query = new Query(Criteria.where("age").lt(18));
        DeleteResult result = mongoTemplate.remove(query, Person.class);
        System.out.println("删除条数:" + result.getDeletedCount());
    }

 查询文档

    /**
     * 查询集合中的全部文档数据
     */
    @Test
    public void findAll()  {
        List<Person> result = mongoTemplate.findAll(Person.class);
        System.out.println("查询结果:" + result.toString());
    }

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值