JAVA 操作 MongoDB 进行数据读写
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import org.bson.Document;
import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoIterable;
import com.mongodb.client.model.Filters;
public class App {
private static App singleton;
private App() {
}
public static synchronized App getInstance() {
if (singleton == null) {
singleton = new App();
}
return singleton;
}
private static final String host = "127.0.0.1";
private static final Integer port = 27017;
public static MongoClient getMongoClient() {
MongoClient mongoClient = new MongoClient(host, port);
return mongoClient;
}
/**
* findAllDataByDatabaseNameAndTable 获取数据
*
* @param databaseName 数据库名称
* @param table 表名 (连接名)
*/
public void findAllDataByDatabaseNameAndTable(String databaseName, String table) {
try {
MongoClient mongoClient = getMongoClient();
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);
System.out.println("连接数据库" + databaseName + "成功");
MongoCollection<Document> collection = mongoDatabase.getCollection(table);
System.out.println("集合 " + table + " 选择成功");
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while (mongoCursor.hasNext()) {
System.out.println(mongoCursor.next().toJson());
}
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
/**
* createCollection 创建对应的数据库的表(连接)
*
* @param databaseName 数据库名称
* @param table 表名(连接名)
*/
public void createCollection(String databaseName, String table) {
try {
// 连接到 mongodb 服务
MongoClient mongoClient = getMongoClient();
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);
System.out.println("连接数据库" + databaseName + "成功");
mongoDatabase.createCollection(table);
System.out.println("集合创建成功");
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
/**
* getAllCollectionsBydatabaseName 获取所有的集合 根据 数据库名称
*
* @param databaseName 数据库名称
*/
public void getAllCollectionsByDatabaseName(String databaseName) {
MongoClient mongoClient = getMongoClient();
MongoIterable<String> colls = mongoClient.getDatabase(databaseName).listCollectionNames();
for (String coll : colls) {
System.out.println(coll);
}
}
/**
* getDatabaseAll 获取所有的数据库
*/
public void getDatabaseAll() {
try {
MongoClient mongoClient = getMongoClient();
MongoIterable<String> databaseNames = mongoClient.listDatabaseNames();
for (String databaseName : databaseNames) {
System.out.println(databaseName);
}
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
/**
* updateDocument 更新文档数据
*
* @param databaseName 数据库名
* @param table 集合名称
* @param historyMap 历史值
* @param nowValue 新的值
*/
public void updateDocument(String databaseName, String table, HashMap<String, String> historyMap, String nowValue) {
try {
MongoClient mongoClient = getMongoClient();
MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName); // 连接到数据库
System.out.println("连接数据库" + databaseName + "成功");
MongoCollection<Document> collection = mongoDatabase.getCollection(table);
System.out.println("集合 " + table + " 选择成功");
for (Map.Entry<String, String> entry : historyMap.entrySet()) {
collection.updateMany(Filters.eq(entry.getKey(), entry.getValue()),
new Document("$set", new Document(entry.getKey(), nowValue)));
}
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while (mongoCursor.hasNext()) {
System.out.println(mongoCursor.next());
}
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
/**
* deleteDocument 删除文档
*
* @param databaseName 数据库名
* @param table 集合名称
* @param historyMap 历史值
*/
public void deleteDocument(String databaseName, String table, HashMap<String, String> historyMap) {
try {
MongoClient mongoClient = getMongoClient();
MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName); // 连接到数据库
System.out.println("连接数据库" + databaseName + "成功");
MongoCollection<Document> collection = mongoDatabase.getCollection(table);
System.out.println("集合 " + table + " 选择成功");
for (Map.Entry<String, String> map : historyMap.entrySet()) {
collection.deleteMany(Filters.eq(map.getKey(), map.getValue())); // 删除所有符合条件的文档
}
// collection.deleteOne(Filters.eq("likes", 200)); // 删除符合条件的第一个文档
// 检索查看结果
FindIterable<Document> findIterable = collection.find();
MongoCursor<Document> mongoCursor = findIterable.iterator();
while (mongoCursor.hasNext()) {
System.out.println(mongoCursor.next());
}
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
/**
* insertDocument 新增文档
*
* @param databaseName 数据库名
* @param table 集合名称
* @param nowMap 新增的值
*/
public void insertDocument(String databaseName, String table, HashMap<String, String> nowMap) {
try {
MongoClient mongoClient = getMongoClient(); // 连接到 mongodb 服务
MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName); // 连接到数据库
System.out.println("连接数据库" + databaseName + "成功");
MongoCollection<Document> collection = mongoDatabase.getCollection(table); // 获取集合
System.out.println("集合 " + table + " 选择成功");
Document document = new Document();
for (Map.Entry<String, String> map : nowMap.entrySet()) {
document.append(map.getKey(), map.getValue());
}
List<Document> documents = new ArrayList<Document>();
documents.add(document);
collection.insertMany(documents); // 添加文档(对应的BSON数据)
System.out.println("数据库" + databaseName + ",集合为" + table + ",文档插入成功");
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
/**
* findDataByTypeLike 模糊查询
*
* @param databaseName 数据库名称
* @param table 集合名称
* @param nowMap 参数
*/
public void findDataByTypeLike(String databaseName, String table, HashMap<String, String> nowMap) {
MongoClient mongoClient = getMongoClient(); // 连接到 mongodb 服务
MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName); // 连接到数据库
MongoCollection<Document> collection = mongoDatabase.getCollection(table); // 获取集合
BasicDBObject queryObject = new BasicDBObject();
for (Map.Entry<String, String> map : nowMap.entrySet()) {
Pattern queryPattern = Pattern.compile(map.getValue(), Pattern.CASE_INSENSITIVE);
queryObject.put(map.getKey(), queryPattern);
}
FindIterable<Document> document = collection.find(queryObject);
for (Document doc : document) {
System.out.println(doc);
}
}
/**
* findDataLimitAndLikeByPage 模糊并且分页查询
*
* @param databaseName 数据库名称
* @param table 集合名称
* @param nowMap 参数
* @param pageNo 页码
* @param pageSize 条数
*/
public void findDataLimitAndLikeByPage(String databaseName, String table, HashMap<String, String> nowMap,
Integer pageNo, Integer pageSize) {
MongoClient mongoClient = getMongoClient(); // 连接到 mongodb 服务
MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName); // 连接到数据库
MongoCollection<Document> collection = mongoDatabase.getCollection(table); // 获取集合
BasicDBObject queryObject = new BasicDBObject();
for (Map.Entry<String, String> map : nowMap.entrySet()) {
Pattern queryPattern = Pattern.compile(map.getValue(), Pattern.CASE_INSENSITIVE);
queryObject.put(map.getKey(), queryPattern);
}
FindIterable<Document> document = collection.find(queryObject).skip(pageNo).limit(pageSize);
for (Document doc : document) {
System.out.println(doc);
}
}
public static void main(String[] args) {
App app = App.getInstance();
HashMap<String, String> map = new HashMap<String, String>();
// map.put("name", "谢");
// map.put("phone", "15912345678");
// map.put("username", "admin");
// map.put("password", "123456");
// map.put("age", "21");
// map.put("address", "湖北省 武汉市");
// app.updateDocument("student", "user", map, "小企鹅");
// app.deleteDocument("student", "user", map);
// app.insertDocument("student", "user", map);
// app.findAllDataByDatabaseNameAndTable("student", "user");
// app.findDataByTypeLike("student", "user", map);
int pageNo = 2; // 页码
int pageSize = 5; // 条数
System.out.println("当前是第" + pageNo + "页,查询条数为" + pageSize);
pageNo = (pageNo - 1) * pageSize;
app.findDataLimitAndLikeByPage("student", "user", map, pageNo, pageSize);
}
}