MongoDB相关操作
前置条件:1.项目中需添加MongoDB相关依赖;2.文件中导入MongoDb所需的包;
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.10</version>
</dependency>
1. 获取MongoClient客户端
/**
* 获取MongoClient客户端
* @param url 连接mongo的URL
* 未配置账号时URL为:"mongodb://IP:PORT/" (如:mongodb://127.0.0.1:27017)
* 已配置账号时URL为:"mongodb://USERNAME:PASSWORD@IP:PORT/" (如:mongodb://root:root@127.0.0.1:27017)
* @return
*/
public static MongoClient getMongoClient(String url) {
MongoClientURI mongoClientURI = new MongoClientURI(url);
MongoClient mongoClient = new MongoClient(mongoClientURI);
return mongoClient;
}
2. 获取数据库列表
/**
* 获取数据库列表
*
* @param url 连接mongo的URL
* 未配置账号时URL为:"mongodb://IP:PORT/" (如:mongodb://127.0.0.1:27017)
* 已配置账号时URL为:"mongodb://USERNAME:PASSWORD@IP:PORT/" (如:mongodb://root:root@127.0.0.1:27017)
* @return
*/
public static ListDatabasesIterable<Document> getDataBases(String url) {
MongoClient mongoClient = getMongoClient(url);
ListDatabasesIterable<Document> listDatabasesIterable = mongoClient.listDatabases();
for (Document database: listDatabasesIterable) {
System.out.println("DataBase : " + database.get("name"));
}
close(mongoClient);
return listDatabasesIterable;
}
输出结果如下:
============= >> ========= DataBase ============= << =========
DataBase : admin
DataBase : local
DataBase : config
DataBase : test
DataBase : testdata
3. 获取数据库中的集合
/**
* 获取数据库中的集合
*
* @param url 连接mongo的URL
* 未配置账号时URL为:"mongodb://IP:PORT/" (如:mongodb://127.0.0.1:27017)
* 已配置账号时URL为:"mongodb://USERNAME:PASSWORD@IP:PORT/" (如:mongodb://root:root@127.0.0.1:27017)
* @return
*/
public static void getCollectionNames(String url) {
ListDatabasesIterable<Document> listDatabasesIterable = getDataBases(url);
MongoClient mongoClient = getMongoClient(url);
for (Document database: listDatabasesIterable) {
String databaseName = String.valueOf(database.get("name"));
// 跳过系统相关表
if ("admin".equals(databaseName)
|| "config".equals(databaseName)
|| "local".equals(databaseName)) {
continue;
}
MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);
MongoIterable<String> collectionNames = mongoDatabase.listCollectionNames();
System.out.println("DataBase : " + databaseName);
for (String collectionName: collectionNames) {
System.out.println(" CollectionName : " + collectionName);
// getField(mongoDatabase, collectionName);
// getDocument(mongoDatabase, collectionName);
}
}
close(mongoClient);
}
输出结果如下:
DataBase : test
CollectionName : test
CollectionName : user
DataBase : testdata
CollectionName : account
CollectionName : class
CollectionName : score
4. 获取集合中的字段及格式
/**
* 获取集合中的字段及格式
*
* @param mongoDatabase 数据库
* @param collectionName 集合名称
*/
public static void getField(MongoDatabase mongoDatabase, String collectionName) {
Document doc = mongoDatabase.getCollection(collectionName).find().first();
System.out.println("Collection : " + collectionName);
if (Objects.nonNull(doc)) {
BsonDocument document = BsonDocument.parse(doc.toJson());
for(Map.Entry<String, BsonValue> entry : document.entrySet()){
BsonValue value = entry.getValue();
String type = value.getBsonType().name();
System.out.println("Column : " + entry.getKey() + " ==== ColumnType : " + type);
}
}
}
输出的结果如下:
Collection : account
Column : _id ==== ColumnType : STRING
Column : name ==== ColumnType : STRING
Column : classId ==== ColumnType : ARRAY
5. 获取集合中的数据
/**
* 获取集合中的数据
*
* @param mongoDatabase 数据库
* @param collectionName 集合名称
*/
public static void getDocument(MongoDatabase mongoDatabase, String collectionName) {
MongoCollection<Document> collection = mongoDatabase.getCollection(collectionName);
// 查询限制50条
FindIterable<Document> findIterable = collection.find().limit(50);
System.out.println("CollectionName : " + collectionName);
for (Document document : findIterable) {
System.out.println(document);
}
}
输出结果如下:
CollectionName : account
Document{{_id=11, name=李xxx, classId=[1, 2, 3]}}
Document{{_id=22, name=赵sss, classId=[1, 2]}}
Document{{_id=33, name=钱sss, classId=[2, 3]}}
6. 关闭客户端连接
public static void close(MongoClient mongoClient) {
if (Objects.nonNull(mongoClient)) {
mongoClient.close();
}
}
总体
import com.mongodb.client.*;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import org.bson.BsonDocument;
import org.bson.BsonValue;
import org.bson.Document;
import java.util.Map;
import java.util.Objects;
public class MongodbDemo {
// 1.获取MongoClient客户端
public static MongoClient getMongoClient(String url) {
MongoClientURI mongoClientURI = new MongoClientURI(url);
MongoClient mongoClient = new MongoClient(mongoClientURI);
return mongoClient;
}
// 2.获取数据库列表
public static ListDatabasesIterable<Document> getDataBases(String url) {
MongoClient mongoClient = getMongoClient(url);
ListDatabasesIterable<Document> listDatabasesIterable = mongoClient.listDatabases();
for (Document database: listDatabasesIterable) {
System.out.println("DataBase : " + database.get("name"));
}
close(mongoClient);
return listDatabasesIterable;
}
// 3.获取数据库中的集合
public static void getCollectionNames(String url) {
ListDatabasesIterable<Document> listDatabasesIterable = getDataBases(url);
MongoClient mongoClient = getMongoClient(url);
for (Document database: listDatabasesIterable) {
String databaseName = String.valueOf(database.get("name"));
// 跳过系统相关表
if ("admin".equals(databaseName)
|| "config".equals(databaseName)
|| "local".equals(databaseName)) {
continue;
}
MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);
MongoIterable<String> collectionNames = mongoDatabase.listCollectionNames();
System.out.println("DataBase : " + databaseName);
for (String collectionName: collectionNames) {
System.out.println(" CollectionName : " + collectionName);
getField(mongoDatabase, collectionName);
getDocument(mongoDatabase, collectionName);
}
}
close(mongoClient);
}
// 4.获取集合中的字段及格式
public static void getField(MongoDatabase mongoDatabase, String collectionName) {
Document doc = mongoDatabase.getCollection(collectionName).find().first();
System.out.println("Collection : " + collectionName);
if (Objects.nonNull(doc)) {
BsonDocument document = BsonDocument.parse(doc.toJson());
for(Map.Entry<String, BsonValue> entry : document.entrySet()){
BsonValue value = entry.getValue();
String type = value.getBsonType().name();
System.out.println("Column : " + entry.getKey() + " ==== ColumnType : " + type);
}
}
}
// 5.获取集合中的数据
public static void getDocument(MongoDatabase mongoDatabase, String collectionName) {
MongoCollection<Document> collection = mongoDatabase.getCollection(collectionName);
// 查询限制50条
FindIterable<Document> findIterable = collection.find().limit(50);
System.out.println("CollectionName : " + collectionName);
for (Document document : findIterable) {
System.out.println(document);
}
}
// 6.关闭客户端连接
public static void close(MongoClient mongoClient) {
if (Objects.nonNull(mongoClient)) {
mongoClient.close();
}
}
// 测试
public static void main(String[] args) {
String path = "mongodb://127.0.0.1:27017";
MongoClient client = getMongoClient(path);
ListDatabasesIterable<Document> listDatabases = getDataBases(path);
getCollectionNames(path);
getField(client.getDatabase("testdata"), "account");
getDocument(client.getDatabase("testdata"), "account");
close(client);
}
}