使用mongodb-driver驱动包操作MongoDB

  • mongodb-driver
    mongodb-driver 是mongodb 官方推出的Java连接MongoDB的驱动包,相当于JDBC驱动。
    该包操作mongodb非常的不友好,这里只提一下有这个技术,感兴趣的可以自己看菜鸟教程学习一下。
  • SpringDataMongoDB
    SpringDataMongoDB是SpringData家族成员之一,吊炸天的MongoDB持久层框架,底层封装了mongodb-driver。

下面使用 mongodb-driver来操作MongoDB。
创建一个 maven工程, 引入 mongodb-driver依赖。

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

一、连接MongoDB

1、连接MongoDB服务

1.1 不通过认证连接MongoDB服务

MongoClient mongoClient = new MongoClient(“localhost”, 27017);

  • “localhost” 表示连接的服务器地址,
  • 默认端口号为 27017,可以省略 。
1.2 通过安全认证连接MongoDB服务(推荐使用)
		List<ServerAddress> adds = new ArrayList<>();
		// ServerAddress()两个参数分别为 服务器地址 和 端口
		ServerAddress serverAddress = new ServerAddress("localhost", 27017);
		adds.add(serverAddress);

		List<MongoCredential> credentials = new ArrayList<>();
		// MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
		MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());
		credentials.add(mongoCredential);

		// 通过连接认证获取MongoDB连接
		MongoClient mongoClient = new MongoClient(adds, credentials);
1.3 将连接信息封装成工具类

新建 MongoDBUtil类。通过安全认证连接 MongoDB服务。

import com.mongodb.*;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
import org.bson.Document;

import java.util.ArrayList;
import java.util.List;
public class MongoDBUtil {

	private static MongoClient mongoClient;

	static {
		System.out.println("===============MongoDBUtil初始化========================");
		List<ServerAddress> adds = new ArrayList<>();
		//ServerAddress()两个参数分别为 服务器地址 和 端口
		ServerAddress serverAddress = new ServerAddress("localhost", 27017);
		adds.add(serverAddress);
		List<MongoCredential> credentials = new ArrayList<>();
		//MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
		MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());
		credentials.add(mongoCredential);
		//通过连接认证获取MongoDB连接
		mongoClient = new MongoClient(adds, credentials);
		System.out.println("==========Connect to MongoDB successfully================");
	}

	public static MongoClient getMongoClient() {
		return mongoClient;
	}
}	

2、 数据库操作

2.1 获取所有数据库
	@Test
	public void testGetDBS() {
		MongoIterable<String> dbNames = MongoDBUtil.getMongoClient().listDatabaseNames();
		for (String db : dbNames) {
			System.out.println(db);
		}
	}

在这里插入图片描述

2.2 获取指定数据库 - 若DB不存在则创建
	@Test
	public void testGetDB() {
		MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
		System.out.println(db3); //com.mongodb.client.internal.MongoDatabaseImpl@1d9b7cce
	}

3、获取数据库中的集合

3.1 获取某数据库中的所有集合
	@Test
	public void testGetDBAllCollection() {
		MongoDatabase db1 = MongoDBUtil.getMongoClient().getDatabase("m_db1");
		MongoIterable<String> collNames = db1.listCollectionNames();
		for (String collName : collNames) {
			System.out.println(collName);
		}
	}

在这里插入图片描述

3.2 获取某数据库中的某个集合
	@Test
	public void testGetCollection() {
		MongoDatabase db1 = MongoDBUtil.getMongoClient().getDatabase("m_db1");
		MongoCollection<Document> coll3 = db1.getCollection("coll3");
		System.out.println(coll3.countDocuments()); //7
	}
3.3 创建集合

db1.createCollection(“coll4”);

二、对数据库进行CRUD

1、插入操作

1.1 插入一个文档
    @Test
    public void test() {
        // 创建一个数据库
        MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
        // 创建一个集合,获取该集合
        db3.createCollection("coll1");
        MongoCollection<Document> coll1 = db3.getCollection("coll1");

        // 创建文档
        Map<String, Object> map = new HashMap<>();
        map.put("_id", "11");
        map.put("name", "zhaoyun");
        map.put("age", 18);
        map.put("sex", 1);
        Document document = new Document(map);
        //向集合中插入文档
        coll1.insertOne(document);
        System.out.println(coll1.countDocuments()); //1
    }
1.2 插入多个文档
    @Test
    public void test() {
        MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
        MongoCollection<Document> coll1 = db3.getCollection("coll1");

        //要插入的文档
        List<Document> documents = new ArrayList<>();
        for(int i = 2; i <= 4; i++) {
            Document document = new Document();
            document.append("_id", i * 11 + "");
            document.append("name", "luna" + i);
            document.append("age", i + 10);
            document.append("sex", 0);
            documents.add(document);
        }
        //向集合中插入文档
        coll1.insertMany(documents);
        System.out.println(coll1.countDocuments()); //4
    }

2、常见查询操作

2.1 查询集合中所有记录
    @Test
    public void test() {
        MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
        MongoCollection<Document> coll1 = db3.getCollection("coll1");
        FindIterable<Document> documents = coll1.find();
        for (Document document : documents) {
            System.out.println(document);
        }
    }

在这里插入图片描述

2.2 查询集合中所有总数
        System.out.println(coll1.countDocuments()); //4

我们还可以指定查询过滤器com.mongodb.client.model.Filters查询

2.3 查询集合中某个记录
        //指定查询过滤器
        Bson filter = Filters.eq("_id", "22");
        FindIterable<Document> documents = coll1.find(filter);
        System.out.println(documents.first()); // Document{{_id=22, name=luna2, age=12, sex=0}}
2.4 查询集合中某个记录是否存在
		MongoCollection<Document> coll1 = db3.getCollection("coll1");
		// 指定查询过滤器
		Bson filter = Filters.eq("_id", "444");
		long countDocuments = coll1.countDocuments(filter); //0
		if (countDocuments == 0) {
			System.out.println(false);
		} else {
			System.out.println(true);
		}
2.5 查询集合中某些记录总数

查询过滤器com.mongodb.client.model.Filters的更多用法,自行了解。

    @Test
    public void test() {
        MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
        MongoCollection<Document> coll1 = db3.getCollection("coll1");
        //指定查询过滤器
        Bson filter = Filters.or(
                Filters.eq("sex", 1),
                Filters.and(Filters.eq("sex", 0), Filters.gte("age", 13)));
        FindIterable<Document> documents = coll1.find(filter);
        for (Document document : documents) {
            System.out.println(document);
        }
    }

3、更新操作

这里都使用局部修改。
注意:如果修改的数据和数据库中的字段数据一致,则不会修改,即getModifiedCount不会+1.

3.1 更新集合中的一条记录
	@Test
	public void test() {
		MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
		MongoCollection<Document> coll1 = db3.getCollection("coll1");
		// 指定查询过滤器
		Bson filter = Filters.eq("_id", "44");
		//指定修改的更新文档
		Document updateDocument = new Document("$set", new Document("age", 100).append("name", "安琪拉"));
		UpdateResult updateResult = coll1.updateOne(filter, updateDocument);
		if (updateResult.getModifiedCount() == 0) {
			System.out.println(false);
		} else {
			System.out.println(true);
			System.out.println(updateResult.getModifiedCount()); //1
		}
	}
3.2 更新集合中的多条记录
	// 指定查询过滤器
		Bson filter = Filters.eq("sex", 0);
		//指定修改的更新文档
		Document updateDocument = new Document("$set", new Document("age", 99).append("name", "xiaobing"));
		UpdateResult updateResult = coll1.updateMany(filter, updateDocument);
		if (updateResult.getModifiedCount() == 0) {
			System.out.println(false);
		} else {
			System.out.println(true);
			System.out.println(updateResult.getModifiedCount()); //3
		}

4、删除操作

	@Test
	public void test() {
		MongoDatabase db3 = MongoDBUtil.getMongoClient().getDatabase("m_db3");
		MongoCollection<Document> coll1 = db3.getCollection("coll1");
		// 指定查询过滤器
		Bson filter = Filters.eq("sex", 0);
		DeleteResult deleteResult = coll1.deleteOne(filter);
//		DeleteResult deleteResult = coll1.deleteMany(filter);
		if (deleteResult.getDeletedCount() == 0) {
			System.out.println(false);
		} else {
			System.out.println(true);
			System.out.println(deleteResult.getDeletedCount()); //1
		}
	}

java 操作MongoDB,就搞定了,举一反三,关于过滤器和其他操作方法的更多使用也就ok。

Stay Hungry, Stay Foolish. 求知若饥,虚心若愚。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值