windows docker mongodb

大家好,我是烤鸭:

   今天翻博客,发现4年前的一篇草稿,抽空给完善下。原本草稿写的是linux下mongo使用,还有java的一些api,现在就用容器实现下。

容器部署

官方网站:
https://www.mongodb.com/
windows安装:https://docs.docker.com/desktop/windows/install/

# 下载镜像
docker pull mongo
# 启动镜像
docker run -itd --name mongo --restart=always -v D:\\data\\docker\\mongo:/data/db -p 27017:27017 mongo --auth

-itd --name mongo:运行mongo

–restart=always:设置重启

-v D:\data\docker\mongo:/data/db :本地磁盘 D:\data\docker\mongo 作为存储目录

-p 27017:27017 : 设置端口

–auth : 需要密码访问

# 进入容器
docker exec -it mongo mongo admin
# 创建admin账号
db.createUser({ user:'admin',pwd:'admin',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
# 连接
db.auth("admin","admin");
# 创建city db
use city
# 查看db
db
# 创建city用户
db.createUser({ user:'city',pwd:'city',roles:[ { role:'userAdmin', db: 'city'}]});
# 删除city用户
db.dropUser('city')
# 由于刚才没有建权限,重新创建个
db.createUser({ user:'city',pwd:'city',roles:[ { role:'dbAdmin', db: 'city'},"readWrite"]});

在这里插入图片描述

用户创建相关可以参考这篇:
https://www.jianshu.com/p/02b7f89c7abf

工具-GUI

https://studio3t.com/download-studio3t-free

默认30天完整版试用,到期后自动转入免费版。

导入测试数据

https://download.csdn.net/download/Angry_Mills/85528602
在这里插入图片描述

CURD

# 全量查询
db.getCollection("city").find({})
# 条件查询
db.getCollection("city").find({"name":"北京"})
# 插入数据,返回 WriteResult({ "nInserted" : 1 }) 即为成功
db.city.insert({"label":"测试地区010","name":"北京","pinyin":"Beijing","zip":"010"})
# 修改,db.chartName.update(json1,{$set:json2}) , json1 是条件,json2 是指定更新的字段
db.city.update({"label":"测试地区010"},{$set:{"label":"测试地区020"}})
# 删除数据
db.city.remove({"label":"测试地区020","name":"北京","pinyin":"Beijing","zip":"010"})

Java 连接

demo项目:https://gitee.com/fireduck_admin/boot-mongo-demo

pom

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

application.properties

# spring.data.mongodb.uri=mongodb://用户名:密码@IP:端口/数据库?authSource=admin
spring.data.mongodb.uri=mongodb://city:city@localhost:27017/city?authSource=city

#上面配置可写为以下配置
#spring.data.mongodb.database=city
#spring.data.mongodb.host=localhost
#spring.data.mongodb.port=27017
#spring.data.mongodb.username=city
#spring.data.mongodb.password=city
#spring.data.mongodb.authentication-database=city

City

@Data
@Document(collection = "city")
@AllArgsConstructor
public class City {
    private String label;
    private String name;
    private String pinyin;
    private String zip;
}

MongoController

@RestController
public class MongoController {
    @Autowired
    private MongoTemplate mongoTemplate;

    @GetMapping("/test2")
    public void queryDemo(){
        System.out.println("=============查询所有====================");
        List<City> all = mongoTemplate.findAll(City.class);
        all.forEach(System.out::println);//方法引用
        System.out.println();

        System.out.println("===============条件查询=======================");
        // name是北京的
        String name="北京";
        Query query = new Query(Criteria.where("name").is(name));
        List<City> users = mongoTemplate.find(query, City.class);
        users.forEach(System.out::println);
        System.out.println();

        System.out.println("===============分页查询=======================");
        int pageSize=5,currentPage=1;
        long count = mongoTemplate.count(new Query(), City.class);
        List<City> userList = mongoTemplate.find(new Query().skip((currentPage - 1) * pageSize).limit(pageSize), City.class);
        System.out.println("记录数 = "+count);
        userList.forEach(System.out::println);
    }

}

线上问题记录

记得是两个月前早上5点多被报警短信震醒,mongo的某个结点cpu打满。

在这里插入图片描述

在这里插入图片描述

后来经过排查是新上的查询未走索引,导致查询耗时升高, 引起cpu异常,当时记录的查询监控。

在这里插入图片描述

可以看到,下面的多条件查询,没走组合索引导致的。

在这里插入图片描述

其他常见问题

mongodb 启动失败:ERROR: child process failed, exited with error number 1

mongodb启动时报错ERROR: child process failed, exited with error number 1_SmallTankPy的博客-CSDN博客

数据备份恢复:

MongoDB备份-mongodump和恢复-mongorestore_朝闻道-夕死可矣的博客-CSDN博客

修改数据库名称:

MongoDB修改数据库名_其實很簡單的博客-CSDN博客_mongodb修改数据库名称

docker之mongo数据库备份、导入

https://www.gxlcms.com/sql_question-396380.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烤鸭的世界我们不懂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值