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();
		}

	}

结果:
在这里插入图片描述

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();
		}
	}

结果:
在这里插入图片描述

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();
		}
	}

结果:

在这里插入图片描述

7.总结

1.当前的Java对当前的MongoDB数据操作和python操作基本上差不多

2.java操作的时候添加数据为一个Map集合数据,查询的时候就需要使用Filters这个进行操作

3.修改数据的时候需要注意,如果修改一条数据为updateOne(Filters,Updates),如果是修改多条数据使用,updateMany(Filters,Updates),注意如果需要修改多个内容可以使用重载的updateXXX(Filters,List< Bson >)其中Bson的实际类型为Updates

4.删除数据操作和Python差不多

以上纯属个人见解,如有问题请联系本人!

发布了219 篇原创文章 · 获赞 40 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45492007/article/details/104081235
今日推荐