默认端口: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, "点赞成功");
}
}