mongodb基础-1

一、mongodb简介

        MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

        旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

二、mongodb与mysql比较

        1、mysql:
        优点:
                在不同的引擎上有不同 的存储方式。
                查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高。
                开源数据库的份额在不断增加,mysql的份额页在持续增长。
        缺点:
                在海量数据处理的时候效率会显著变慢。

        2、mongodb:

        优点:
                快速。在适量级的内存的Mongodb的性能是非常迅速的,它将热数据存储在物理内存中,使得热数据的读写变得十分快。
                高扩展性。mongodb的高可用与集群架构拥有十分高的扩展性,通过物理机器的增加,以及sharding的增加,mongodb的扩展将达到一个十分惊人的地步。
                自身的failover机制。Mongodb的副本集配置中,当主库遇到问题,无法继续提供服务的时候,副本集将选举出一个新的主库继续提供服务
                json的存储格式。mongodb的json与bson格式很适合文档格式的存储与查询。
        缺点:
                不支持事务

三、应用场景

        1、将mongodb作为后端db来代替mysql使用,与mongodb 属于平行级别。

        2、将mongodb作为类似redis ,memcache来做缓存db,为mysql提供服务。

四、mongodb基础命令

        1、database

   查看当前的数据库:db

   查看所有的数据库:show dbs /show databases

   切换数据库:use db_name

   删除当前的数据库:db.dropDatabase()

        2、collection    

   创建集合:db.createCollection(name, options)

   显示集合:show collections

   删除集合:db.集合名称.drop()

        3、文档操作

插入文档:db.集合名称.insert(document)

 保存文档:db.集合名称.save(document)

    修改文档:db.集合名称.update(<query> ,<update>,{multi: <boolean>})

    删除文档:db.集合名称.remove(<query>,{justOne: <boolean>})

    查询文档1:db.集合名称.find({条件⽂档})

    查询文档2:db.集合名称.findOne({条件⽂档})

    查询文档3:db.集合名称.find({条件⽂档}).pretty()

    分页查询文档:db.stu.find().skip(5).limit(4)

    排序查询文档:db.stu.find().sort({gender:-1,age:1})

    查询统计:db.stu.find({gender:true}).count()

条件查询:db.collection.find({ field: { $gt: value } })
范围查询:db.collection.find({ field: { $gte: value1, $lte: value2 } }) 
逻辑查询: db.collection.find({ $or: [{ field1: value1 }, { field2: value2 }] }) 
 聚合查询:db.collection.aggregate([{ group: { _id: "field", count: { $sum: 1 } } }])

批量插入文档:db.collection.insertMany([{ field1: value1 }, { field2: value2 }])
批量更新文档:db.collection.updateMany({ field: value }, { $set: { fieldToUpdate: newValue } })
批量删除文档:db.collection.deleteMany({ field: value })

        4、mongodb系统操作

备份数据库:mongodump --db database --out 备份目录
恢复数据库:mongorestore --db database 恢复文档
显示数据库状态:db.stats()
显示集合状态:db.collection.stats()
 

三、mongodb与java连接

        1、引入依赖

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
</dependencies>

        2、数据库配置

spring:
  data:
    mongodb:
      uri: mongodb://localhost:27017/mongodb

        3、常用方法

全部查询:mongoTemplate.findAll(User.class)
id查询:mongoTemplate.findById(<id>, User.class)
条件查询:mongoTemplate.find(query, User.class)
修改:mongoTemplate.upsert(query, update, User.class)
删除:mongoTemplate.remove(query, User.class)
创建:mongoTemplate.insert(User)

精准条件:criteria.and(“key”).is(“条件”)
模糊条件:criteria.and(“key”).regex(“条件”)
封装条件:query.addCriteria(criteria)


大于:Criteria gt = Criteria.where(“key”).gt(“条件”)
小于:Criteria lt = Criteria.where(“key”).lt(“条件”)


Query.addCriteria(new Criteria().andOperator(gt,lt))
排序 :query.with(new Sort(Sort.Direction.ASC, "age"). and(new Sort(Sort.Direction.DESC, "date")))
 

        4、代码(实体类)

package com.example.test.mongodb.mode;
import lombok.Data;
import org.springframework.data.mongodb.core.mapping.Document;

@Data
@Document("mycol2")
public class Mycol2 {
    private String name;
}

        5、代码(测试类)

package com.example.test.mongodb.controller;

import com.example.test.mongodb.mode.Mycol2;
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

@RestController
@RequestMapping("/testMongodb")
public class TestMongodbController {
    
        @Autowired
        private MongoTemplate mongoTemplate;

        //添加文档
        @GetMapping("insert")
        public Mycol2 insert() {
            Mycol2 Mycol2 = new Mycol2();
            Mycol2.setName("test");
//            return mongoTemplate.save(Mycol2);
            return mongoTemplate.insert(Mycol2);
        }

        //查询所有
        @GetMapping("findAll")
        public List<Mycol2> findAll() {
            return mongoTemplate.findAll(Mycol2.class);
        }

        //根据id查询
        @GetMapping("findId")
        public Mycol2 getById(@RequestParam String id) {
            return mongoTemplate.findById(id, Mycol2.class);
        }

        //条件查询
        @GetMapping("findMycol2")
        public List<Mycol2>  findMycol2List() {
            Query query = new Query(Criteria
                    .where("name").is("test")
                    .and("age").is(20));
            return mongoTemplate.find(query, Mycol2.class);
        }

        //模糊查询
        @GetMapping("findLike")
        public void findMycol2sLikeName() {
            String name = "est";
            String regex = String.format("%s%s%s", "^.*", name, ".*$");
            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
            Query query = new Query(Criteria.where("name").regex(pattern));
            List<Mycol2> Mycol2List = mongoTemplate.find(query, Mycol2.class);
            System.out.println(Mycol2List);
        }

        //分页查询
        @GetMapping("findPage")
        public Map<String, Object> findPage() {

            Query query = new Query();
            String regex = String.format("%s%s%s", "^.*", "wen", ".*$");
            Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
            query.addCriteria(Criteria.where("name").regex(pattern));
            int totalCount = (int) mongoTemplate.count(query, Mycol2.class);
            List<Mycol2> Mycol2List = mongoTemplate.find(query.skip(0).limit(10), Mycol2.class);
            Map<String, Object> pageMap = new HashMap<>();
            pageMap.put("list", Mycol2List);
            pageMap.put("totalCount",totalCount);
            return pageMap;
        }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值