大家好,我是烤鸭:
今天翻博客,发现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 {@Autowiredprivate 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