Java小强个人技术博客站点    手机版
当前位置: 首页 >> DB >> Java对mongoDB增删改查操作

Java对mongoDB增删改查操作

45940 DB | 2021-6-16

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。本文介绍了Java操作MongoDB数据库的使用。

mongodb.jpg

模式自由 :可以把不同结构的文档存储在同一个数据库里

面向集合的存储:适合存储 JSON风格文件的形式

完整的索引支持:对任何属性可索引

复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移

自动分片:支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器

丰富的查询:支持丰富的查询表达方式,查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组

快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划

高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)


客户端MongoDBCompass,下载地址:

https://www.mongodb.com/try/download/compass 


这次先不自己安装了,看到阿里云有试用,于是花费9.9元购买了三个月的试用。

阿里有很多选项提供选购,这次购买的是Serverless实例,Serverless轻量级低成本;单节点高性价比;多节点副本集保障业务高可用;分片集群自由配置弹性扩展。

购买地址:https://www.aliyun.com/product/mongodb 


为了方便测试使用,做如下操作:

购买后进入控制台,重置mongodb密码

微信截图_20210616171416.jpg

然后进入数据库连接,申请一个公网进行访问

然后进入安全设置,设置允许所有人访问

微信截图_20210616171329.jpg


然后在工具输入公网访问地址:

mongodb://用户名:密码@连接地址:端口/admin

具体连接地址从阿里复制即可,复制过来的连接信息只要改下你的密码即可,然后就可以进入管理页面

微信截图_20210616171609.jpg


Maven中引入MongoDB客户端

<dependency>
	<groupId>org.mongodb</groupId>
	<artifactId>mongo-java-driver</artifactId>
	<version>3.0.4</version>
</dependency>

MongoDB的3.x版本Java驱动相对2.x做了全新的设计,类库和使用方法上有很大区别。

例如用Document替换BasicDBObject、通过Builders类构建Bson替代直接输入$命令等。


以下JAVA代码演示了对于MongoDB的增删改查操作

package com.example.zMongoDB;

import java.util.ArrayList;
import java.util.List;

import org.bson.Document;
import org.bson.conversions.Bson;

import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;

public class MongoDBJDBC {
	
	private static MongoClient mongoClient = null;

	public static void main(String args[]) {
		testQuery();
	}

	public static void testQuery() {
		MongoDatabase mongoDatabase = getDB();
		// 这里的 "user" 表示集合的名字,如果指定的集合不存在,mongoDB将会在你第一次插入文档时创建集合。
		MongoCollection<Document> collection = mongoDatabase.getCollection("user");

		// 查找集合中的所有文档
		FindIterable<Document> findIterable = collection.find();
		MongoCursor<Document> cursor = findIterable.iterator();
		while (cursor.hasNext()) {
			System.out.println(cursor.next());
		}

		// 指定查询过滤器
		Bson filter = Filters.eq("name", "张1");
		// 指定查询过滤器查询
		findIterable = collection.find(filter);
		cursor = findIterable.iterator();
		while (cursor.hasNext()) {
			System.out.println(cursor.next());
		}

		// 查找集合中的所有文档,-1表示倒序
		findIterable = collection.find().sort(new BasicDBObject("age", -1));
		// 取出查询到的第一个文档
		Document document = (Document) findIterable.first();
		// 打印输出
		System.out.println(document);
		
		closeDB();
	}

	public static void testUpdate() {
		MongoDatabase mongoDatabase = getDB();
		// 这里的 "user" 表示集合的名字,如果指定的集合不存在,mongoDB将会在你第一次插入文档时创建集合。
		MongoCollection<Document> collection = mongoDatabase.getCollection("user");

		// 修改过滤器
		Bson filter = Filters.eq("name", "阿娇");
		// 指定修改的更新文档
		Document document = new Document("$set", new Document("age", 22));
		// 修改单个文档
		collection.updateOne(filter, document);
		// 修改多个文档
		collection.updateMany(filter, document);
		
		closeDB();
	}

	public static void testDel() {
		MongoDatabase mongoDatabase = getDB();
		// 这里的 "user" 表示集合的名字,如果指定的集合不存在,mongoDB将会在你第一次插入文档时创建集合。
		MongoCollection<Document> collection = mongoDatabase.getCollection("user");

		// 申明删除条件,eq等于,也可以设置大于小于等条件
		Bson filter = Filters.eq("age", 18);
		// 删除与筛选器匹配的单个文档
		collection.deleteOne(filter);
		// 删除与筛选器匹配的所有文档
		collection.deleteMany(filter);
		
		closeDB();
	}

	public static void testAdd() {
		MongoDatabase mongoDatabase = getDB();
		// 这里的 "user" 表示集合的名字,如果指定的集合不存在,mongoDB将会在你第一次插入文档时创建集合。
		MongoCollection<Document> collection = mongoDatabase.getCollection("user");

		Document document = new Document("name", "阿娇").append("sex", "女").append("age", 18);
		collection.insertOne(document);

		// 要插入的数据
		List<Document> list = new ArrayList<>();
		for (int i = 1; i <= 3; i++) {
			Document documents = new Document("name", "张" + i).append("sex", "男").append("age", 20 + i);
			list.add(documents);
		}
		// 插入多个文档
		collection.insertMany(list);
		
		closeDB();
	}

	public static MongoDatabase getDB() {
		List<ServerAddress> adds = new ArrayList<>();
		ServerAddress serverAddress = new ServerAddress("地址", 3717);
		adds.add(serverAddress);
		List<MongoCredential> credentials = new ArrayList<>();
		// 用户名 数据库名称 密码
		MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("用户名", "admin",
				"密码".toCharArray());
		credentials.add(mongoCredential);
		mongoClient = new MongoClient(adds, credentials);
		// 这里的 "test" 表示数据库名,若指定的数据库不存在,mongoDB将会在你第一次插入文档时创建数据库。
		MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
		return mongoDatabase;
	}
	
	public static void closeDB() {
		mongoClient.close();
	}

}


可以通过客户端看到已经录入进去的数据

微信截图_20210616173039.jpg


END

推荐您阅读更多有关于“ jdbc mongoDB 驱动 ”的文章

上一篇:Java操作mongoDB之操作符1 下一篇:简单实用的软键盘

猜你喜欢

发表评论: