天天看點

MongoDB:使用Java方式操作目前的MongoDB資料庫

1.聲明

由于前面使用了python操作的MongoDB資料庫,本人現在使用Java方式實作對目前的資料庫的操作,在用于記錄操作!

2.目前的pom依賴

<dependencies>
	<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
	<dependency>
		<groupId>org.mongodb</groupId>
		<artifactId>mongo-java-driver</artifactId>
		<version>3.12.0</version>
	</dependency>
</dependencies>
           

3.連接配接以及查詢操作

由于python中使用的是MongoClient,是以本人檢視是否存在這個類(存在),以及使用這個類

private final String HOST = "localhost";
	private final int POST = 27017;

	public MongoClient getMongoClient() {
		return new MongoClient(HOST, POST);
	}

	public static void main(String[] args) {

	}

	// 用于測試目前的對MongoDB資料庫的查詢操作
	@Test
	public void testFindOption() {
		MongoClient mongoClient = getMongoClient();
		try {
			Assert.notNull(mongoClient, "目前擷取的client不能為空");
			// 和python中相同的需要使用list方式顯示所有的資料庫名稱
			System.out.println("輸出所有的資料庫名字");
			// MongoClientOptions mongoClientOptions = mongoClient.getMongoClientOptions();
			MongoIterable<String> listDatabaseNames = mongoClient.listDatabaseNames();
			CollectionUtils.printCollectionItem(listDatabaseNames);
			// 擷取目前的資料庫
			MongoDatabase db = mongoClient.getDatabase("db1");
			// 通過目前的資料庫擷取目前的集合
			MongoCollection<Document> testCollection = db.getCollection("test");
			// 通過目前的集合對象擷取文檔
			System.out.println("用于檢視目前的test中的所有的資料");
			FindIterable<Document> allDocuments = testCollection.find();
			CollectionUtils.printCollectionItem(allDocuments);
			// 查詢第一個資料
			System.out.println("開始擷取目前的資料結果,查詢_id為1的資料:");
			allDocuments = testCollection.find(Filters.eq("_id", 1));
			CollectionUtils.printCollectionItem(allDocuments);
			// 可以使用Filters實作目前的查詢操作
		} finally {
			mongoClient.close();
		}

	}
           

結果:

MongoDB:使用Java方式操作目前的MongoDB資料庫

4.添加資料操作

// 用于測試添加資料的操作
	@Test
	public void testAddOption() {
		MongoClient mongoClient = getMongoClient();
		try {
			// 添加資料庫
			MongoDatabase javaDB = mongoClient.getDatabase("javaDB");
			// 在目前的資料庫中添加test集合
			javaDB.createCollection("test");
			MongoCollection<Document> testCollection = javaDB.getCollection("test");
			// 添加文檔資料
			System.out.println("添加單條資料==================");
			Map<String, Object> zsMap = new HashMap<String, Object>();
			zsMap.put("name", "張三");
			zsMap.put("age", 18);
			Document zs = new Document(zsMap);
			testCollection.insertOne(zs);
			
			System.out.println("添加多條資料=================");
			List<Document> documents=new ArrayList<Document>();
			
			Map<String, Object> lsMap = new HashMap<String, Object>();
			lsMap.put("name", "李四");
			lsMap.put("age", 20);
			Document ls = new Document(lsMap);
			
			Map<String, Object> wwMap = new HashMap<String, Object>();
			wwMap.put("name", "王五");
			wwMap.put("age", 22);
			Document ww = new Document(wwMap);
			
			documents.add(ls);
			documents.add(ww);
			
			
			testCollection.insertMany(documents);
		} finally {
			if (mongoClient != null)
				mongoClient.close();
		}
	}
           

結果:

MongoDB:使用Java方式操作目前的MongoDB資料庫

5.修改資料操作

// 測試目前的資料的更新操作
	@Test
	public void testUpdateOption() {
		MongoClient mongoClient = getMongoClient();
		try {
			MongoDatabase javaDB = mongoClient.getDatabase("javaDB");
			MongoCollection<Document> testCollection = javaDB.getCollection("test");
			// 修改目前的名字為張三的年齡為16歲//

			// UpdateResult updateOne = testCollection.updateOne(Filters.eq("name",
			// "張三"),Updates.set("age",16));
			// System.out.println(updateOne.getModifiedCount());

			// 發現目前的UpdateOne的時候隻能修改記錄資訊,如果出現需要修改多個資訊就會出現問題

			// 使用多條更新

			// 将目前名字為張三的名字改為張三Update,年齡修改為20
//			List<Bson> updateList = new ArrayList<Bson>();
//			updateList.add(Updates.set("name", "張三Update"));
//			updateList.add(Updates.set("age", 22));
//			UpdateResult updateResult = testCollection.updateOne(Filters.eq("name", "張三"), updateList);
//			System.out.println("目前更新的條數為:" + updateResult.getModifiedCount());
			// 更新成功,是以建議使用目前的List方式實作目前的更新操作,如果使用一個可能出現問題

			// 使用目前的批量更新資料,将所有年齡大于21歲資料中将年齡設定為18
			UpdateResult updateMany = testCollection.updateMany(Filters.gt("age", 21), Updates.set("age", 18));
			System.out.println("目前更新的條數:" + updateMany.getModifiedCount());
		} finally {
			if (mongoClient != null)
				mongoClient.close();
		}
	}
           

上面執行的結果就不顯示了!

6.删除資料操作

// 測試目前的删除操作
	@Test
	public void testDeleteOption() {
		MongoClient mongoClient = getMongoClient();
		try {
			MongoDatabase javaDB = mongoClient.getDatabase("javaDB");
			MongoCollection<Document> testCollection = javaDB.getCollection("test");
			// 删除目前的名字為張三的資料
			testCollection.deleteOne(Filters.eq("name", "張三"));
			// 删除年齡大于18的所有資料
			testCollection.deleteMany(Filters.gt("age", 18));
		} finally {
			if (mongoClient != null)
				mongoClient.close();
		}
	}
           

結果:

MongoDB:使用Java方式操作目前的MongoDB資料庫

7.總結

1.

目前的Java對目前的MongoDB資料操作和python操作基本上差不多

2.java操作的時候

添加資料為一個Map集合資料,查詢的時候就需要使用Filters這個進行操作

3.修改資料的時候需要注意,

如果修改一條資料為updateOne(Filters,Updates)

,

如果是修改多條資料使用,updateMany(Filters,Updates)

,注意如果需要

修改多個内容可以使用重載的updateXXX(Filters,List< Bson >)其中Bson的實際類型為Updates

4.

删除資料操作和Python差不多

以上純屬個人見解,如有問題請聯系本人!