1、MongoDB介绍
MongoDB是一个独立的服务器
MongoDB是基于文档的,不是基于表格的。
它是非结构化的。
不必去学习另一种查询语言。
它具有强大的语言支持,如:C#、C++、java、PHP、perl、Python、Ruby
2、创建MongoDB数据库连接
/**
* 初始化时调用
*/
@Override
void afterPropertiesSet() {
try {
log.info("========MongodDB Connection init===");
//获取配置参数
int mongoDbPoolSize = grailsApplication.config.mongo.poolsize;
/**主数据库**/
String mongoDbHostLeft = grailsApplication.config.mongo.hostLeft;
int mongonDbPortLeft = grailsApplication.config.mongo.portLeft;
/**从数据库**/
String mongoDbHostRight = grailsApplication.config.mongo.hostRight;
int mongonDbPortRight = grailsApplication.config.mongo.portRight;
/**数据库名称**/
mDbName = grailsApplication.config.mongo.databaseName;
/**控制系统在发生连接错误时是否重试**/
boolean autoConnectRetry = grailsApplication.config.mongo.options.autoConnectRetry;
/**在建立或打开连接时超时时间**/
int connectTimeout = grailsApplication.config.mongo.options.connectTimeout;
/**MongoDB池连接数**/
System.setProperty("MONGO.POOLSIZE", String.valueOf(mongoDbPoolSize));
ServerAddress left = new ServerAddress(mongoDbHostLeft, mongonDbPortLeft);
ServerAddress right = new ServerAddress(mongoDbHostRight, mongonDbPortRight);
mMongo = new Mongo(left, right);
/**为mongo实例指定一些参数**/
MongoOptions options = mMongo.getMongoOptions();
options.autoConnectRetry = autoConnectRetry;
options.connectTimeout = connectTimeout;
/**每个主机允许的连接数(每个主机的连接池大小),用完时会被阻塞**/
options.connectionsPerHost = mongoDbPoolSize;
} catch (Exception e) {
log.error(messageSourceService.getMessage("DBConError"),e);
throw new LogicException(messageSourceService.getMessage("DBConError"));
}
}
/**根据名称获得数据库**/
public DB getDB() {
DB db = null;
try {
db = this.mMongo.getDB(mDbName);
} catch (Exception e) {
log.error(messageSourceService.getMessage("DBConError"),e)
throw new LogicException(messageSourceService.getMessage("DBConError"));
}
return db;
}
/**
* 销毁时调用
*/
@Override
void destroy() {
log.info("========MongodDB Connection destroy===");
if (mMongo != null) {
mMongo.close();
}
}
3、数据库操作新增数据
/**
* 创建表单实例
* @param formId
* @param formInstanceContent
*/
public String createFormInstance(Long formId, String formInstanceContent) {
DB db = mongoDbService.getDB();
/**获得一个聚集集合相当于数据库中的表**/
DBCollection collection = db.getCollection("${FORM_INSTANCE_COLLECTION_NAME}${formId}")
/**存储的数据格式bson(一种json的扩展)**/
BasicDBObject dbObject = JSON.parse(formInstanceContent);
Date now = new Date();
dbObject.put("createdBy", SessionContext.loginUser.id);
dbObject.put("createdByName", SessionContext.loginUser.realName);
dbObject.put("createdTime", now);
dbObject.put("updatedBy", SessionContext.loginUser.id);
dbObject.put("updatedByName", SessionContext.loginUser.realName);
dbObject.put("updatedTime", now);
dbObject.put("status", PROCESS_STATUS_CODE.auditing);
/**插入数据**/
collection.insert(dbObject);
ObjectId objectId = (ObjectId) dbObject.get("_id");
return objectId.toStringMongod();
}
4、数据库操作修改数据
/**
* 更新表单实例
* @param formId
* @param formInstanceId
* @param formInstanceContent
*/
public void updateFormInstance(Long formId, String formInstanceId, String formInstanceContent) {
DB db = mongoDbService.getDB();
DBCollection collection = db.getCollection("${FORM_INSTANCE_COLLECTION_NAME}${formId}")
Date now = new Date();
BasicDBObject updatedValue = JSON.parse(formInstanceContent);
updatedValue.put("updatedBy", SessionContext.loginUser.id);
updatedValue.put("updatedByName", SessionContext.loginUser.realName);
updatedValue.put("updatedTime", now);
BasicDBObject updateSetValue = new BasicDBObject('$set', updatedValue);
BasicDBObject keyObject = new BasicDBObject();
keyObject.put("_id", new ObjectId(formInstanceId));
collection.update(keyObject, updateSetValue);
}
5、数据库操作删除数据
/**
* 删除表单实例
* @param formId
* @param formInstanceId
*/
public void deleteFormInstance(Long formId, String formInstanceId) {
DB db = mongoDbService.getDB();
DBCollection collection = db.getCollection("${FORM_INSTANCE_COLLECTION_NAME}${formId}")
BasicDBObject keyObject = new BasicDBObject();
keyObject.put("_id", new ObjectId(formInstanceId));
collection.remove(keyObject);
}
6、数据库操作查询数据库
/**
* 通过表单实例ID查询表单实例
* @param formId
* @param formInstanceId
* @return
*/
public Map findFormInstanceById(Long formId, String formInstanceId) {
DB db = mongoDbService.getDB();
DBCollection collection = db.getCollection("${FORM_INSTANCE_COLLECTION_NAME}${formId}")
BasicDBObject keyObject = new BasicDBObject();
keyObject.put("_id", new ObjectId(formInstanceId));
DBObject dbObject = collection.findOne(keyObject);
return dbObject.toMap();
}
/**
* 查询表单实例
* @param formId
* @param conditionJson
* @return
*/
public PagedResult queryFormInstance(Long formId, String conditionJson, Map pageParams) {
DBCursor cursor = null;
try {
DB db = mongoDbService.getDB();
DBCollection collection = db.getCollection("${FORM_INSTANCE_COLLECTION_NAME}${formId}");
BasicDBObject condition = JSON.parse(conditionJson);
int total = collection.find(condition).count();
BasicDBObject sortObject = new BasicDBObject();
if (pageParams.sort) {
sortObject.append(pageParams.sort, "asc".equalsIgnoreCase(pageParams.order) ? "1" : "-1");
}
cursor = collection.find(condition).sort(sortObject).limit(pageParams.max).skip(pageParams.offset);
List<Map> list = new ArrayList<Map>();
while (cursor.hasNext()) {
DBObject dbObject = cursor.next();
Map map = dbObject.toMap();
ObjectId objectId = (ObjectId) dbObject.get("_id");
map.put("id", objectId.toStringMongod())
list.add(map)
}
return new PagedResult(total, list);
} finally {
if (cursor != null) {
cursor.close();
}
}
}
/**
* 查询我申请的表单
* @param formId
* @param startDate
* @param endDate
* @return
*/
public PagedResult getMyFormInstance(Long formId, Date startDate, Date endDate, Map pageParams) {
DBCursor cursor = null;
try {
DB db = mongoDbService.getDB();
DBCollection collection = db.getCollection("${FORM_INSTANCE_COLLECTION_NAME}${formId}");
BasicDBObject condition = new BasicDBObject();
condition.put("createdBy", SessionContext.loginUser.id);
BasicDBObject createdTimeValue = new BasicDBObject();
if (startDate != null) {
createdTimeValue.put('$gte', startDate);
}
if (endDate != null) {
createdTimeValue.put('$lt', endDate + 1);
}
if (!createdTimeValue.isEmpty()) {
condition.put("createdTime", createdTimeValue);
}
int total = collection.find(condition).count();
BasicDBObject sortObject = new BasicDBObject();
sortObject.append('createdTime', -1);
cursor = collection.find(condition).sort(sortObject).limit(pageParams.max).skip(pageParams.offset);
List<Map> list = new ArrayList<Map>();
while (cursor.hasNext()) {
DBObject dbObject = cursor.next();
Map map = dbObject.toMap();
ObjectId objectId = (ObjectId) dbObject.get("_id");
map.put("id", objectId.toStringMongod())
list.add(map)
}
return new PagedResult(total, list);
} finally {
if (cursor != null) {
cursor.close();
}
}
}