MongoDB系列-- SpringBoot 中對 MongoDB 的 基本操作
阿新 • • 發佈:2019-08-18
SpringBoot 中對 MongoDB 的 基本操作
Database 庫的建立
首先 在MongoDB 操作客戶端 Robo 3T 中 建立資料庫:
增加使用者User:
建立 Collections 集合(類似mysql 中的 表):
後面我們大部分都是基於建立的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 測試引數:
在 Robo 中 可以查詢到:
新增資料成功 ,其中 ObjectId是一個12位元組的 BSON 型別字串, 由
組成
插入資料
@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();
}
輸入引數:
可以看到:
但有個問題,當引數中 key 在 mongodb 不存在時,會自己建立:
之前mongodb並沒有 age 欄位,現在可以看到:
這可能對有些業務場景,對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