Docker-制作MongoDB容器

默认端口:27017

先安装win10上面的,再制作docker容器,一次玩个够。下面是基本介绍:

MongoDB 数据类型

基本类型:
	1.null:用于表示空值或不存在的字段 ---> {“field”:null}
	2.布尔型:有二个值 true 和 false ------> {"filed":true}
	3.数值: shell默认使用64位浮点型数值。{“filed”:3.14}或 {”filed“:3}
		对于整型值,可以使用NumberInt(4字节符号整数) 或 NumberLong(8字节符号整数) ;{“filed":NumberInt("3")}   {"filed":NumberLong("3")}
	4.字符串:UTF-8 字符串都可以表示为字符串类型的数据   {”filed":"utf-8"}
	5.日期:日期被存储为自新纪元依赖经过的ms数,不存储时区,{“filed”:new Date()}
	6.正则表达式:查询时,使用正则表达式作为限定条件,语法与javascript的正则表达式相同 {”fileld“:/[a]/}
	7.数组:数据列表或数据集可以表示为数组  {”filed":["a","b","c"]}
	8.内嵌文档:文档可以嵌套其他文档,被嵌套的文档作为值来处理。{“filed":{"a":555}}
	9.对象id: 对象id是一个12字节的字符串,是文档的唯一标识, {”filed“:objectId()}
	10.二进制数据: 二进制数据是一个任意字节的字符串。它不能直接在shell中使用。如果要将非utf-字符保存到数据库中,二进制数据是唯一的方式。
	11.代码:查询和文档中可以包括任何javascript代码 --》{”field“:function(){.....}}
	

1.下载win 客户端和服务端
https://www.mongodb.com/try/download/community
在这里插入图片描述
下载完后,一路下一步,记得安装的文件路径,需要配置环境变量

2.配置环境变量
此电脑——》高级系统设置——》环境变量——》在系统环境变量中找到 path ,添加mongoDB 的bin目录。(我自定义安装在F盘了)
在这里插入图片描述
3.在doc中进入安装的bin下
输入 mongo 查看版本号
在这里插入图片描述
新建data用于存放mongoDB数据的目录
输入

mongod -dbpath=f:\data

在这里插入图片描述
出现无法启动服务,cmd -》 sc delete MongoDB(删除服务)
修改bin下面的 mongod.cfg 配置文件,只贴了日志路径,还有数据目录配置在上面(没贴出来)
在这里插入图片描述
在这里插入图片描述
注释配置文件mp 即可

4.然后安装服务

mongod.exe --config "F:\MongoDB\bin\mongod.cfg" --install

启动服务:net start MongoDB
在这里插入图片描述
在这里插入图片描述
5.新建一个doc窗口,输入:mongo ,连接本地服务ok
在这里插入图片描述
以上在Win10上安装测试。。。。

开始制作docker容器

//搜索镜像
docker search mongodb

//下载
docker pull mongodb

//启动容器
docker run -di --name=mymongodb -p 27017:27017 mongo

//客户端远程登录
mongo ip:27017


java操作mongodb

//导入maven依赖
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
 </dependency>

yml中

spring:
  application:
    name: mongodb-demo
  data:
    mongodb:
      host: ip #(本地127.0.0.1即可)
      database: spitdb #需要新建数据库
      port: 27017

mapper 继承 MongoRepository<Spit, String>

//<Spit, String> 第一个实体,第二个id类型
public interface SpitMapper extends MongoRepository<Spit, String> {
     //这里也可以自定查询条件
     //例如:Page<Spit> findByParentid(String parentid, Pageable pageable);
}

service 中全部代码(简单crud)

package com.tensquare.spit.service;

import com.tensquare.spit.mapper.SpitMapper;
import com.tensquare.spit.pojo.Spit;
import entity.PageResult;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
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.Service;
import org.springframework.transaction.annotation.Transactional;
import utils.IdWorker;

import java.util.Date;
import java.util.List;

 
@Service
@Transactional
public class SpitService {
    @Autowired
    private MongoTemplate mongoTemplate;

    //查所有
    public List<Spit> findAll() {
        return spitMapper.findAll();
    }

    //根据id查
    public Spit findById(String id) {
        return spitMapper.findById(id).get();
    }
  
   //保存
    public void save(Spit spit) {
        spit.set_id(String.valueOf(idWorker.nextId()));
        spit.setPublishtime(new Date());//发布日期
        spit.setVisits(0);//浏览量
        spit.setShare(0);//分享数
        spit.setThumbup(0);//点赞数
        spit.setComment(0);//回复数
        spit.setState("1");//状态

        //更新父节点的回复数
        if (StringUtils.isNotBlank(spit.getParentid())) {
            Query query=new Query();
            query.addCriteria(Criteria.where("_id").is(spit.getParentid()));
            Update update=new Update();
            update.inc("comment",1);
            mongoTemplate.updateFirst(query, update, "spit");
        }

        spitMapper.save(spit);
    }

    //修改
    public void update(Spit spit) {
        spitMapper.save(spit);
    }

    //删除
    public void deleteById(String id) {
        spitMapper.deleteById(id);
    }

    //查询带分页
    public Page<Spit> findByParentid(String parentid, int page, int size) {
        Pageable pageable = PageRequest.of(page - 1, size);
        return spitMapper.findByParentid(parentid, pageable);
    }

    //点赞操作
    public void thumbup(String spitId) {
        //这样写,效率有问题,使用原生mongodb命令操作(优化)
//        Spit spit = spitMapper.findById(spitId).get();
//        spit.setThumbup((spit.getThumbup() == null ? 0 : spit.getThumbup()) + 1);
//        spitMapper.save(spit);

        //db.spit.update({"_id":"1"},{$inc:{thumbup:NumberInt(1)}})

        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(spitId));
        Update update = new Update();
        update.inc("thumbup", 1);

        mongoTemplate.updateFirst(query, update, "spit");

    }

}

controller 代码

package com.tensquare.spit.controller;

import com.tensquare.spit.pojo.Spit;
import com.tensquare.spit.service.SpitService;
import entity.PageResult;
import entity.Result;
import entity.StatusCode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;

/**
 * @Author: YanLei
 * @Date: 2020-08-08 14:54
 */
@RestController
@CrossOrigin
@RequestMapping("spit")
public class SpitController {

    @Autowired
    private SpitService spitService;
    @Autowired
    private RedisTemplate redisTemplate;


    @GetMapping()
    public Result findAll() {
        return new Result(true, StatusCode.OK, "查询成功", spitService.findAll());
    }

    @GetMapping("/{spitId}")
    public Result findById(@PathVariable String spitId) {
        return new Result(true, StatusCode.OK, "one查询成功", spitService.findById(spitId));
    }

    /**
     * 发布吐槽
     *
     * @param spit
     * @return
     */
    @PostMapping("save")
    public Result save(@RequestBody Spit spit) {
        spitService.save(spit);
        return new Result(true, StatusCode.OK, "保存成功");
    }

    @PutMapping("/{spitId}")
    public Result update(@PathVariable String spitId, @RequestBody Spit spit) {
        spit.set_id(spitId);
        spitService.update(spit);
        return new Result(true, StatusCode.OK, "修改成功");
    }


    @DeleteMapping("/{spitId}")
    public Result delete(@PathVariable String spitId) {
        spitService.deleteById(spitId);
        return new Result(true, StatusCode.OK, "删除成功");
    }

    /**
     * 根据上级id查询吐槽数据
     *
     * @param parentid
     * @return
     */
    @GetMapping("/comment/{parentid}/{page}/{size}")
    public Result findByParentid(@PathVariable String parentid, @PathVariable int page, @PathVariable int size) {
        Page<Spit> result = spitService.findByParentid(parentid, page, size);
        return new Result(true, StatusCode.OK, "吐槽数据列表", new PageResult<>(result.getTotalElements(), result.getContent()));
    }

    /**
     * 点赞
     *
     * @param spitId
     * @return
     */
    @PostMapping("/thumbup/{spitId}")
    public Result thumbup(@PathVariable String spitId) {
        String userid = "1";
        if (redisTemplate.opsForValue().get("thumbup:" + userid) != null) {
            return new Result(false, StatusCode.REPERROR, "不能重复点赞");
        }
        spitService.thumbup(spitId);
        redisTemplate.opsForValue().set("thumbup:" + userid, 1);
        return new Result(true, StatusCode.OK, "点赞成功");
    }

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值