package xxx.utils;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.WriteResult;
public class MongoDBUtil {
private static DB dbConnection = null;
public static String MONGO_IP = "";
public static int MONGO_PORT;
public static String MONGO_DBNAME = "";
public static String MONGO_COLLECTION = "";
private static MongoClient mongoClient = null;
private static Map<String, DBCollection> dbCollectionMap = new ConcurrentHashMap<String, DBCollection>();
static {
MONGO_IP = "192.168.0.121";
MONGO_PORT = 27017;
MONGO_DBNAME = ""; //你的数据库名
MONGO_COLLECTION = "accident";//你的collection名
//最好是用下面的读取配置文件
/**
* try { // 读取配置文件 Properties prop = new Properties();
* prop.load(MongoDBUtil.class.getClassLoader().getResourceAsStream(
* "db/mongo.properties")); // 根据 key 获取 value MONGO_IP =
* prop.getProperty("mongo_ip"); MONGO_PORT =
* Integer.parseInt(prop.getProperty("mongo_port")); MONGO_DBNAME =
* prop.getProperty("mongo_dbname"); MONGO_COLLECTION =
* prop.getProperty("mongo_collection");
*
* } catch (IOException e) { e.printStackTrace();
* System.err.println("读取mongo.properties出错"); }
*/
}
public static MongoClient getMongoClient() {
if (mongoClient == null) {
try {
mongoClient = new MongoClient(MONGO_IP, MONGO_PORT);
if (null != mongoClient) {
dbConnection = mongoClient.getDB(MONGO_DBNAME);
}
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
return mongoClient;
}
/**
* get an table
*
* @param collectionName
* @return
*/
private static DBCollection getDBCollection(String collectionName) {
MongoDBUtil.getMongoClient();
DBCollection collection = null;
if (dbCollectionMap.containsKey(collectionName)) {
collection = dbCollectionMap.get(collectionName);
} else {
collection = MongoDBUtil.dbConnection.getCollection(collectionName);
if (null != collection) {
dbCollectionMap.put(collectionName, collection);
}
}
return collection;
}
/**
* check if doc exsit
*
* @param collectionName
* table name
* @param query
* target document
*/
public static boolean isDocumentExsit(String collectionName, DBObject query) {
boolean result = false;
DBCursor dbCursor = null;
DBCollection collection = MongoDBUtil.getDBCollection(collectionName);
if (null != collection) {
dbCursor = collection.find(query);
if (null != dbCursor && dbCursor.hasNext()) {
result = true;
}
}
return result;
}
/**
* query an record
*
* @param collectionName
* table name
* @param query
* target document
* @return
*/
public static List<DBObject> selectDocument(String collectionName,
DBObject query) {
List<DBObject> result = new ArrayList<>();
DBCursor dbCursor = null;
DBCollection collection = MongoDBUtil.getDBCollection(collectionName);
if (null != collection) {
dbCursor = collection.find(query);
if (null != dbCursor) {
while (dbCursor.hasNext()) {
result.add(dbCursor.next());
}
}
}
return result;
}
/**
* query all
*
* @param collectionName
* table name
* @param query
* target document
* @return
*/
public static List<DBObject> selectAll(String collectionName) {
List<DBObject> result = new ArrayList<>();
DBCursor dbCursor = null;
DBCollection collection = MongoDBUtil.getDBCollection(collectionName);
if (null != collection) {
dbCursor = collection.find();
if (null != dbCursor) {
while (dbCursor.hasNext()) {
result.add(dbCursor.next());
}
}
}
return result;
}
/**
* /** insert an new record
*
* @param collectionName
* table name
* @param newDocument
* new doc
* @param query
* target document
*/
public static void insertDocument(String collectionName,
DBObject newDocument) {
DBCollection collection = MongoDBUtil.getDBCollection(collectionName);
if (null != collection) {
if (!MongoDBUtil.isDocumentExsit(collectionName, newDocument)) {// insert
// only
// doc
// not
// exist
collection.insert(newDocument);
}
}
}
/**
*
* @param collectionName
* @param documentList
*/
public static void insertDocument(String collectionName,
List<DBObject> documentList) {
DBCollection collection = MongoDBUtil.getDBCollection(collectionName);
if (null != collection) {
collection.insert(documentList);
}
}
/**
* update an document
*
* @param collectionName
* @param query
* target document
* @param updatedDocument
* @return
*/
public static boolean updateDocument(String collectionName, DBObject query,
DBObject updatedDocument) {
boolean result = false;
WriteResult writeResult = null;
DBCollection collection = MongoDBUtil.getDBCollection(collectionName);
if (null != collection) {
writeResult = collection.update(query, updatedDocument);
if (null != writeResult) {
if (writeResult.getN() > 0) {
result = true;
}
}
}
return result;
}
/**
* delete an document
*
* @param collectionName
* @param document
* target document
* @return
*/
public static boolean deleteDocument(String collectionName, DBObject query) {
boolean result = false;
WriteResult writeResult = null;
DBCollection collection = MongoDBUtil.getDBCollection(collectionName);
if (null != collection) {
writeResult = collection.remove(query);
if (null != writeResult) {
if (writeResult.getN() > 0) {
result = true;
}
}
}
return result;
}
/**
*group 要写很复杂的js,不支持集群,尽量少用,使用aggregate代替
*/
public static DBObject group(String collectionName, DBObject key,
DBObject cond, DBObject initial, String reduce, String fn) {
DBCollection collection = MongoDBUtil.getDBCollection(collectionName);
if (null != collection) {
return collection.group(key, cond, initial, reduce, fn);
}
return null;
}
/**
*query 查询条件
*keys 要返回的字段
*sorter 排序字段
*/
public static List<DBObject> selectDocument(String collectionName,
DBObject query, DBObject keys, DBObject sorter) {
List<DBObject> result = new ArrayList<>();
DBCursor dbCursor = null;
DBCollection collection = MongoDBUtil.getDBCollection(collectionName);
if (null != collection) {
dbCursor = collection.find(query, keys);
if (sorter != null) {
dbCursor = dbCursor.sort(sorter);
}
if (null != dbCursor) {
result = dbCursor.toArray();
}
}
return result;
}
@SuppressWarnings("unchecked")
public static List<Object> distinct(String collectionName, String key,
DBObject query) {
List<Object> list = new ArrayList<Object>();
DBCollection collection = MongoDBUtil.getDBCollection(collectionName);
if (null != collection) {
list = collection.distinct(key, query);
}
return list;
}
public static List<Object> distinct(String collectionName, String key) {
return MongoDBUtil.distinct(collectionName, key, null);
}
}