package com.homolo.justice.lcsms.www.util;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
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.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* Mongo操作工具类.
*
* @author ldy
* @date 2020/10/29
*/
@Component
public class MongoUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(MongoUtil.class);
private static final String HOST_ONE = "ip1";
private static final String HOST_TWO = "ip2";
private static final int PORT = 端口;
private static final String DB_NAME = "数据库名称";
private static final String AUTH_DATABASE = "自动登陆数据库";
private static final String USER_NAME = "用户名称";
private static final String USER_PWD = "密码";
private static MongoDatabase db;
static {
try {
// 连接到MongoDB服务
// ServerAddress()两个参数分别为 服务器地址 和 端口
List<ServerAddress> addrs = new ArrayList<>();
addrs.add(new ServerAddress(HOST_ONE, PORT));
addrs.add(new ServerAddress(HOST_TWO, PORT));
//三个参数分别为 用户名 数据库名称 密码
MongoCredential credential = MongoCredential.createScramSha1Credential(USER_NAME, AUTH_DATABASE, USER_PWD.toCharArray());
// 通过连接认证获取MongoDB连接
//连接操作对象
MongoClientOptions options = MongoClientOptions.builder().sslEnabled(false).build();
//连接对象
MongoClient mongoClient = new MongoClient(addrs, credential, options);
//连接到数据库
db = mongoClient.getDatabase(DB_NAME);
LOGGER.info("数据库连接成功");
} catch (Exception e) {
LOGGER.error("数据库连接失败:", e);
}
}
/**
* 根据集合名称获取集合数据 .
*
* @param collectionName 集合名称.
* @param filter 过滤条件.
* @param sort 排序条件.
* @param date 日期条件.
* @return 返回数据集合.
*/
public List<Document> getCollction(String collectionName, Bson filter, Bson sort, Date date) {
if (db == null) {
return null;
}
MongoCollection<Document> collection = db.getCollection(collectionName);
FindIterable<Document> documents = collection.find(cond);
if (filter != null) {
documents.filter(filter);
}
if (sort != null) {
documents.sort(sort);
}
MongoCursor<Document> iterator = documents.iterator();
List<Document> result = new ArrayList<>();
while (iterator.hasNext()) {
Document next = iterator.next();
result.add(next);
}
if (!result.isEmpty()) {
return result;
}
return null;
}
/**
* 获取单个文档.
*
* @param table 集合名称.
* @param filter 过滤条件.
* @param sort 排序条件.
* @return Document文档信息
*/
public Document findOneDoc(String table, Bson filter, Bson sort) {
MongoCollection<Document> coll = db.getCollection(table);
FindIterable<Document> resultIterable = coll.find();
if (sort != null) {
resultIterable.sort(sort);
}
if (filter != null) {
resultIterable.filter(filter);
}
return resultIterable.first();
}
/**
* 添加文档.
*
* @param table 集合名称.
* @param doc 文档内容.
*/
public void addDocument(String table, Document doc) {
MongoCollection<Document> coll = getCollection(table);
coll.insertOne(doc);
LOGGER.info("添加成功");
}
/**
* 批量添加文档.
*
* @param table 集合名称.
* @param docList 文档集合.
*/
public void addDocumentList(String table, List<Document> docList) {
MongoCollection<Document> coll = getCollection(table);
coll.insertMany(docList);
}
/**
* 更新文档.
*
* @param table 集合名称.
* @param query 查询条件.
* @param up 更新数据.
* @return UpdateResult更新之后返回的信息
*/
public UpdateResult updateDocument(String table, Bson query, Bson up) {
MongoCollection<Document> coll = getCollection(table);
return coll.updateOne(query, up);
}
/**
* 替换文档.
*
* @param table 集合名称.
* @param query 查询条件.
* @param up 替换的文件对象.
* @return UpdateResult替换之后返回的信息
*/
public UpdateResult replaceDocument(String table, Bson query, Document up) {
MongoCollection<Document> coll = getCollection(table);
return coll.replaceOne(query, up);
}
/**
* 删除文档.
*
* @param table 集合名称
* @param delete 删除条件
* @return DeleteResult删除之后返回的信息
*/
public DeleteResult deleteDocument(String table, Bson delete) {
MongoCollection<Document> coll = getCollection(table);
return coll.deleteOne(delete);
}
/**
* 获取集合对象.
*
* @param table 集合名称
* @return MongoCollection删除之后返回的信息
*
*/
private MongoCollection<Document> getCollection(String table) {
return db.getCollection(table);
}
}
注:
该方法我之测试了添加查询,和替换功能,其他需要使用需要自己去测试
//根据条件查询数据
Bson bson = new BasicDBObject("synsource", "条件");
// 获取信访人信息
List<Document> collction = this.mongoUtil.getCollction("table", bson, null);