1. 程式人生 > >MongoDB系列-- SpringBoot 中對 MongoDB 的 基本操作

MongoDB系列-- SpringBoot 中對 MongoDB 的 基本操作

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