ICode9

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

MongoDB应用实战

2022-07-17 10:36:16  阅读:159  来源: 互联网

标签:实战 name MongoDB User 应用 expectSalary public user


MongoDB应用实战

MongoDB的适用场景

  • 网站数据:Mongo非常适合实时的插入、更新和查询,并具备网站实时数据存储所需的复制及高度伸缩性
  • 缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载
  • 大尺寸、低价值的数据:使用传统的关系型数据库存储一些大尺寸低价值的数据时会比较浪费。
  • 高伸缩性的场景:MongoDB非常适合由数十或数百服务器组成的数据库,Mongo的路线图中已经包含对MapReduce引擎的内置支持以及集群高可用的解决方案
  • 用于对象及JSON数据的存储:Mongo的BSON数据格式也非常适合文档化格式的存储及查询

MongoDB的行业场景

  • 游戏场景:使用MongoDB存储游戏用户信息、用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新。
  • 物流场景:使用MongoDB存储订单信息,订单状态在运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来
  • 社交场景:使用MongoDB存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能
  • 物联网场景:使用MongoDB存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析
  • 直播场景:使用MongoDB存储用户信息、礼物信息等

也可以根据下面这个表判断能否使用MongoDB:

应用特性 Yes/No
应用不需要事务及复杂join支持
新应用,需求会变,数据模型无法确定,想快速迭代开发
应用需要TB甚至 PB 级别数据存储
应用发展迅速,需要能快速水平扩展
应用要求存储的数据不丢失
应用需要99.999%高可用
应用需要大量的地理位置查询、文本查询

如果以上条件满足,那么就可以使用MongoDB。

MongoDB Java客户端

下面将介绍三种方式连接MongoDB。分别是:MogoClient、MongoTemplate、MongoRepository。

1. MongoClient

引入依赖

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongo-java-driver</artifactId>
    <version>3.10.1</version>
</dependency>

文档添加

public static void add(){
        MongoClient mongoClient=new MongoClient("192.168.56.115",27017);
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("user");
        Document document=Document.parse("{name:'lisi',city:'bj',birth_day:new ISODate('2001-08-01'),expectSalary:18000}");
        collection.insertOne(document);
        mongoClient.close();
    }

文档查询

public static void query(){
        MongoClient mongoClient=new MongoClient("192.168.56.115",27017);
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("user");
        Document sortDocument=new Document();
        sortDocument.append("expectSalary",1);
        FindIterable<Document> documents = collection.find().sort(sortDocument);
        for (Document document:documents){
            System.out.println(document);
        }
        mongoClient.close();
    }

    public static void query2(){
        MongoClient mongoClient=new MongoClient("192.168.56.115",27017);
        MongoDatabase database = mongoClient.getDatabase("test");
        MongoCollection<Document> collection = database.getCollection("user");
        FindIterable<Document> documents = collection.find(Filters.gt("expectSalary", 21000));
        for (Document document:documents){
            System.out.println(document);
        }
        mongoClient.close();
    }

2. MongoTemplate

2.1 在Spring应用里配置如下:

引入依赖:

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-mongodb</artifactId>
  <version>2.0.9.RELEASE</version>
</dependency>

注入Spring Bean

<!-- 构建MongoDb工厂对象 -->
  <mongo:db-factory id="mongoDbFactory"
    client-uri="mongodb://192.168.211.133:37017/lg_resume">
  </mongo:db-factory>
  <!-- 构建 MongoTemplate 类型的对象 -->
  <bean id="mongoTemplate"
class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg index="0" ref="mongoDbFactory"></constructor-arg>
  </bean>

2.2 Spring Boot里配置如下:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
        <version>2.2.2.RELEASE</version>
</dependency>

配置文件:

spring.data.mongodb.host=192.168.56.115
spring.data.mongodb.port=27017
spring.data.mongodb.database=test

开始使用mongoTemplate

@Repository
public class UserDaoImpl implements UserDao{

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public  List<User> getUser(String name) {
        Query query=new Query();
        query.addCriteria(Criteria.where("name").is(name));
        List<User> users = mongoTemplate.find(query, User.class, "user");
        return users;
    }

    @Override
    public User addUser(User user) {
        User result = mongoTemplate.insert(user);
        return result;
    }

    @Override
    public List<User> getUser(String name, Double expectSalary) {
        Query query=new Query();
        query.addCriteria(Criteria.where("name").is(name).andOperator(Criteria.where("expectSalary").gt(expectSalary)));
        return mongoTemplate.find(query,User.class);
    }

    @Override
    public void updateUser(String name, Double expectSalary) {
        Query query=new Query();
        query.addCriteria(Criteria.where("name").is(name));
        Update update=new Update();
        update.set("expectSalary",expectSalary);
        mongoTemplate.updateFirst(query,update,User.class);
    }

    @Override
    public void deleteUser(String name) {
        mongoTemplate.remove(Query.query(Criteria.where("name").is(name)),User.class);
    }
}

3. MongoRepository

3.1 引入依赖

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
        <version>2.2.2.RELEASE</version>
</dependency>

3.2 配置文件:

spring.data.mongodb.host=192.168.56.115
spring.data.mongodb.port=27017
spring.data.mongodb.database=test

3.3 编写实体类,并加上@Document("集合名")

3.4 编写Repository接口,继承MongoRepository

public interface UserRepository extends MongoRepository<User, String> {

    List<User> findByName(String username);

    List<User> findByNameAndExpectSalaryGreaterThan(String username, Double expectSalary);

    void deleteByName(String username);
}

3.5 使用Repository

@Repository
public class UserDaoImpl2 implements UserDao{


    @Autowired
    private UserRepository userRepository;

    @Override
    public  List<User> getUser(String name) {
        List<User> users = userRepository.findByName(name);
        return users;
    }

    @Override
    public User addUser(User user) {
        User result = userRepository.save(user);
        return result;
    }

    @Override
    public List<User> getUser(String name, Double expectSalary) {
        List<User> users = userRepository.findByNameAndExpectSalaryGreaterThan(name, expectSalary);
        return users;
    }

    @Override
    public void updateUser(String name, Double expectSalary) {
        User user=new User();
        user.setName(name);
        user.setExpectSalary(expectSalary);
        userRepository.save(user);
    }

    @Override
    public void deleteUser(String name) {
       userRepository.deleteByName(name);
    }
}

标签:实战,name,MongoDB,User,应用,expectSalary,public,user
来源: https://www.cnblogs.com/javammc/p/16485991.html

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

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

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

ICode9版权所有