MongoDB系列-- SpringBoot 中对 MongoD
2019-08-21 本文已影响3人
刀哥说Java
SpringBoot 中对 MongoDB 的 基本操作
Database 库的创建
首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库:
image增加用户User:
image创建 Collections 集合(类似mysql 中的 表):
image后面我们大部分都是基于创建的Collection “collectiondemo”操作的。
依赖包
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version> 2.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version> 2.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<version> 2.1.7.RELEASE</version>
</dependency>
</dependencies>
SpringBoot 中 application.properties 文件配置
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=mongodemo
spring.data.mongodb.username=login
spring.data.mongodb.password=login
MongoDB 中的 增删改查 操作
定义 MongoTemplate
@Autowired
private MongoTemplate mongoTemplate;
private static String COLLECTION_DEMO = "collectiondemo";
基于 mongoTemplate 操作
添加数据
@PostMapping("/insertDocument")
public void insertDocument(String document) {
//获取集合
MongoCollection<Document> collection = mongoTemplate.getCollection(COLLECTION_DEMO);
Document parse = Document.parse(document);
//插入文档
collection.insertOne(parse);
}
postman 测试参数:
image在 Robo 中 可以查询到:
image添加数据成功 ,其中 ObjectId是一个12字节的 BSON 类型字符串, 由
image组成
插入数据
@PutMapping("/updateDocument")
public Long updateDocument(String queryDocument, String ducument) {
MongoCollection<Document> collection = mongoTemplate.getCollection(COLLECTION_DEMO);
BasicDBObject queryParse = BasicDBObject.parse(queryDocument);
BasicDBObject parse = BasicDBObject.parse(ducument);
UpdateResult result = collection.updateOne(queryParse, new BasicDBObject("$set",parse));
return result.getModifiedCount();
}
输入参数:
image可以看到:
image但有个问题,当参数中 key 在 mongodb 不存在时,会自己创建:
image之前mongodb并没有 age 字段,现在可以看到:
image这可能对有些业务场景,对key要求严格的 就无法通过这个满足条件 ,此时mongodb 中 可以用$exists 解决:
@PutMapping("/updateDocumentOnlyHave")
public Long updateDocumentOnlyHave(String id, String ducument) {
MongoCollection<Document> collection = mongoTemplate.getCollection(COLLECTION_DEMO);
BasicDBObject parse = BasicDBObject.parse(ducument);
Set<String> keySet = parse.keySet();
BasicDBObject dbObject = new BasicDBObject();
dbObject.put("id",id);
for (String key : keySet) {
dbObject.put(key, new BasicDBObject("$exists",true));
}
UpdateResult result = collection.updateOne(dbObject, new BasicDBObject("$set",parse));
return result.getModifiedCount();
}
查询数据
@GetMapping("/listDocuments")
public List<Document> findDocuments() {
MongoCollection<Document> collection = mongoTemplate.getCollection(COLLECTION_DEMO);
FindIterable<Document> documents = collection.find();
List<Document> listDocuments = new ArrayList<>();
for (Document document : documents) {
listDocuments.add(document);
}
return listDocuments;
}
删除数据
@DeleteMapping("/deleteDocument")
public DeleteResult deleteDocument(String name) {
MongoCollection<Document> collection = mongoTemplate.getCollection(COLLECTION_DEMO);
DeleteResult result = collection.deleteOne(new BasicDBObject("name", name));
return result;
}