MongoDB下载安装及Java操作MongoDB,CRUD示例

下载地址:https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.6-signed.msi

下载下来双击安装即可,最新版的数据目录data和日志目录log都在安装路径下,不用配置任何东西,而且在Windows的服务里也会自动安装,

默认是开机自动启动的,可以在服务里将其改为手动启动 

只是环境变量没有配置,可以配置一下将Mongo的bin目录配置到系统环境变量的Path中即可【就如下图一样】,当然也可以配置个MONOGO_HOME=D:\Softwares\MongoDB\Server\4.0\,然后在path里%MONOGO_HOME%\bin引用,因为path长度有限制,如果没事就直接放path,简单

 然后在命令行使用mongo命令就可以连接Mongo Server,默认主机名localhost和端口27017,可以不用指定

而且会安装一个MongoDB Compass的图形界面管理工具

下面是Java操作MongoDB的CRUD简单示例,每个方法作为单元测试写的,执行完户可以在上面的图形界面里面去检验

原文代码可以不看,安装好MongoDB,启动Mongo服务,直接新建一个Maven工程 ,在pom中依赖Mongo依赖和Junit,Apache Collections,Google Guava就可以了,如下,然后,拷贝下面的代码运行并观察即可

更多例子参考:https://www.cnblogs.com/minsons/articles/7026600.html

<dependency>
	<groupId>org.apache.commons</groupId>
	<artifactId>commons-collections4</artifactId>
	<version>4.3</version>
</dependency>

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

<dependency>
	<groupId>com.google.guava</groupId>
	<artifactId>guava</artifactId>
	<version>27.0-jre</version>
</dependency>

<dependency>
	<groupId>junit</groupId>
	<artifactId>junit</artifactId>
	<version>4.12</version>
	<scope>test</scope>
</dependency>
package cn.cuit.mongodb;

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

import org.apache.commons.collections4.IterableUtils;
import org.apache.commons.collections4.IteratorUtils;
import org.bson.Document;
import org.junit.Test;

import com.google.common.collect.Lists;
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 MongoDBCRUD {
	public static void main(String args[]) {
		/**
		 * 本实例中 Mongo 数据库无需用户名密码验证。如果你的 Mongo 需要验证用户名及密码,可以使用以下代码:testMongo01方法
		 */
		try {
			// 连接到 mongodb 服务
			MongoClient mongoClient = new MongoClient("localhost", 27017);

			// 连接到数据库,指定数据库名称,如果指定的数据库不存在,mongo会自动创建数据库。创建完成后,在Compass里面刷新看不到,但是创建Collection后刷新才会出现
			MongoDatabase mongoDatabase = mongoClient.getDatabase("cuitCol");
			System.out.println(mongoDatabase.getName());
			System.out.println("Connect to database successfully DBName is : " + mongoDatabase.getName());

			mongoClient.close();
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}

	// 安装的Mongo默认没有用户名和密码,需要自己配置,配置用户名和密码参考:https://blog.csdn.net/qq_32502511/article/details/80619277
	public void testConnectMongo01() {
		try {
			// 连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
			// ServerAddress()两个参数分别为 服务器地址 和 端口
			ServerAddress serverAddress = new ServerAddress("localhost", 27017);
			List<ServerAddress> addrs = new ArrayList<ServerAddress>();
			addrs.add(serverAddress);

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

			// 通过连接认证获取MongoDB连接
			// MongoClient mongoClient = new MongoClient(addrs, credentials);
			// //过时,第二个参数不要用List
			MongoClient mongoClient = new MongoClient(addrs, credential, null);

			// 连接到数据库
			MongoDatabase mongoDatabase = mongoClient.getDatabase("databaseName");
			System.out.println("Connect to database successfully DBName is " + mongoDatabase.getName());

			mongoClient.close();
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}

	// 使用 com.mongodb.client.MongoDatabase 类中的createCollection()来创建集合
	@Test
	public void testCreateCollection() {
		try {
			// 连接到 mongodb 服务
			MongoClient mongoClient = new MongoClient("localhost", 27017);

			// 连接到数据库
			MongoDatabase mongoDatabase = mongoClient.getDatabase("cuitCol");
			System.out.println("Connect to database successfully");
			mongoDatabase.createCollection("test");
			System.out.println("集合创建成功");

			mongoClient.close();
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}

	// 使用com.mongodb.client.MongoDatabase类的 getCollection() 方法来获取一个集合
	@Test
	public void testGetCollection() {
		try {
			// 连接到 mongodb 服务
			MongoClient mongoClient = new MongoClient("localhost", 27017);

			// 连接到数据库
			MongoDatabase mongoDatabase = mongoClient.getDatabase("cuitCol");
			System.out.println("Connect to database successfully");

			MongoCollection<Document> collection = mongoDatabase.getCollection("test");
			System.out.println("获取到的Collection是:" + collection.getNamespace());

			mongoClient.close();
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}

	// 使用com.mongodb.client.MongoCollection类的 insertMany() 方法来插入一个文档
	@Test
	public void testInsertDoc() {
		try {
			// 连接到 mongodb 服务
			MongoClient mongoClient = new MongoClient("localhost", 27017);

			// 连接到数据库
			MongoDatabase mongoDatabase = mongoClient.getDatabase("cuitCol");
			System.out.println("Connect to database successfully");

			MongoCollection<Document> collection = mongoDatabase.getCollection("test");
			System.out.println("获取到的Collection是:" + collection.getNamespace());
			// 插入文档
			/**
			 * 1. 创建文档 org.bson.Document 参数为key-value的格式 2. 创建文档集合List<Document> 3.
			 * 将文档集合插入数据库集合中 mongoCollection.insertMany(List<Document>) 插入单个文档可以用
			 * mongoCollection.insertOne(Document)
			 */
			Document document = new Document("title", "MongoDB").append("description", "database").append("likes", 100)
					.append("by", "CUIT");
			List<Document> documents = new ArrayList<Document>();
			documents.add(document);
			collection.insertMany(documents);
			System.out.println("文档插入成功");

			mongoClient.close();
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}

	// 使用 com.mongodb.client.MongoCollection 类中的 find()
	// 方法来获取集合中的所有文档。此方法返回一个游标,所以你需要遍历这个游标
	@Test
	public void testFind() {
		try {
			// 连接到 mongodb 服务
			MongoClient mongoClient = new MongoClient("localhost", 27017);

			// 连接到数据库
			MongoDatabase mongoDatabase = mongoClient.getDatabase("cuitCol");
			System.out.println("Connect to database successfully");

			MongoCollection<Document> collection = mongoDatabase.getCollection("test");
			System.out.println("集合 test 选择成功");

			// 检索所有文档
			/**
			 * 1. 获取迭代器FindIterable<Document> 2. 获取游标MongoCursor<Document> 3. 通过游标遍历检索出的文档集合
			 */
			FindIterable<Document> findIterable = collection.find();
			MongoCursor<Document> mongoCursor = findIterable.iterator();
			while (mongoCursor.hasNext()) {
				System.out.println(mongoCursor.next());
			}
			findIterable.iterator().forEachRemaining(System.out::println);
			// for (Document document : findIterable) {}
			mongoClient.close();
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}

	// 使用 com.mongodb.client.MongoCollection 类中的 updateMany() 方法来更新集合中的文档
	@Test
	public void testUpdate() {
		try {
			// 连接到 mongodb 服务
			MongoClient mongoClient = new MongoClient("localhost", 27017);

			// 连接到数据库
			MongoDatabase mongoDatabase = mongoClient.getDatabase("cuitCol");
			System.out.println("Connect to database successfully");

			MongoCollection<Document> collection = mongoDatabase.getCollection("test");
			System.out.println("集合 test 选择成功");

			// 更新文档 将文档中likes=100的文档修改为likes=200
			collection.updateMany(Filters.eq("likes", 100), new Document("$set", new Document("likes", 200)));
			// 检索查看结果
			FindIterable<Document> findIterable = collection.find();
			// Apache Collections
			IteratorUtils.toList(findIterable.iterator()).forEach(System.out::println);
			IterableUtils.toList(findIterable).forEach(System.out::println);
			// Google guava 或者 Google Collections【前者包含后者,提供的工具类更多】
			Lists.newArrayList(findIterable).forEach(System.out::println);
			mongoClient.close();
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}

	// 要删除集合中的第一个文档,首先你需要使用com.mongodb.DBCollection类中的
	// findOne()方法来获取第一个文档,然后使用remove 方法删除。
	@Test
	public void testDelete() {
		try {
			// 连接到 mongodb 服务
			MongoClient mongoClient = new MongoClient("localhost", 27017);

			// 连接到数据库
			MongoDatabase mongoDatabase = mongoClient.getDatabase("cuitCol");
			System.out.println("Connect to database successfully");

			MongoCollection<Document> collection = mongoDatabase.getCollection("test");
			System.out.println("集合 test 选择成功");

			// 删除符合条件的第一个文档
			collection.deleteOne(Filters.eq("likes", 200));
			// 删除所有符合条件的文档
			collection.deleteMany(Filters.eq("likes", 200));
			// 检索查看结果
			FindIterable<Document> findIterable = collection.find();
			MongoCursor<Document> mongoCursor = findIterable.iterator();
			mongoCursor.forEachRemaining(System.out::println);

			mongoClient.close();
		} catch (Exception e) {
			System.err.println(e.getClass().getName() + ": " + e.getMessage());
		}
	}
}

********************************* 不积跬步无以至千里,不积小流无以成江海 ********************************* 

猜你喜欢

转载自blog.csdn.net/weixin_42465125/article/details/88535229