前言:空余时间研究下MongoDB,它作为典型的NoSQL数据库,存储JSON格式的数据十分方便,本文将会记录安装和使用的部分方法。
一. 安装与配置
方法一:MongoDB Cloud
推荐使用MongoDB Cloud服务(支持创建免费云数据库),详见:https://cloud.mongodb.com/
方法二:利用Docker安装
需要下载镜像,推荐选择4.4版本,目前最新版为5.0,5.0后会对saslContinue参数严格校验,配置略微麻烦一点。
1 2 3 4 5 6 7 8 9 10 11 12
| docker pull mongo:4.4
docker run -itd --name mongo -p 27017:27017 mongo:4.4 --auth
# 通过容器名称进入容器内部,并以admin账号登陆mongo docker exec -it mongo mongo admin
# 容器内部执行指令 db.createUser({ user:'root',pwd:'123456',roles:[ { role:'root', db: 'admin'}]});
# 返回1则成功 db.auth('root', '123456')
|
方法三:本机安装
如果是安装在本机上(安装过程略),需要进行以下配置:
1)先配置管理员用户
1 2 3
| > use admin switched to db admin > db.createUser({user:"admin",pwd:"admin",roles:[{role:"root", db:"admin"}]})
|
2)配置文件修改
1 2 3 4 5
| net: port: 27017 bindIp: 0.0.0.0 security: authorization: enabled
|
二. 在SpringBoot中使用
配置
1)pom.xml中添加依赖
1 2 3 4
| <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency>
|
2)配置application.yml
1 2 3 4 5 6 7 8 9
| spring: data: mongodb: authentication-database: admin database: test username: admin password: admin123456 host: 127.0.0.1 port: 27017
|
映射
只需要在对应实体类上加注解:
1
| @Document(collection = "user")
|
自定义id
插入记录时,MongoDB会自动生成一条不重复的_id字段,若想自定义,可以通过@MongoId注解
1 2
| @MongoId private String title;
|
使用
1)直接存储 JSONObject
1 2 3 4 5 6
| @Autowired private MongoTemplate mongoTemplate;
public void test(){ mongoTemplate.save(JSONObject对象, 集合名); }
|
使用MongoRepository进行CRUD
略
使用MongoTemplate进行CRUD
https://blog.csdn.net/liboyang71/article/details/87916549
三. 部分原生操作
3.1 权限操作
1 2 3 4 5 6 7 8
| use admin
db.system.users.find()
db.system.users.remove({})
db.createUser({user:"root",pwd:"test123",roles:[{role:"root", db:"admin"}]})
|
3.2 原生查询
1 2 3 4 5
| db.getCollection("CET4_2").find({"content.word.wordId":"CET4_2_1"}).pretty()
db.getCollection('CET4_2').distinct("content.word.wordId").length
|
3.3 遍历替换旧数据
可以用于旧数据需要批量替换成新数据的场景,下面看一个具体案例。
1 2 3 4 5 6 7
| db.getCollection("comment").find({ nick: "BA_NANA" }).forEach(function(item) { item.nick = item.nick.replace('BA_NANA', "扎克蕉"); item.mail = item.mail.replace('old@qq.com', "new@qq.com"); db.getCollection("comment").save(item); });
|
上面的操作将会寻找集合名为comment且nick字段为BA_NANA
的数据,然后使用forEach遍历替换数据(nick字段BA_NANA
替换成扎克蕉
,mail字段old@qq.com
替换成new@qq.com
)。