Mongodb数据库基础

1MongoDB介绍

MongoDB是一个独立的服务器

     MongoDB是基于文档的,不是基于表格的。

     它是非结构化的。

     不必去学习另一种查询语言。

     它具有强大的语言支持,如:C#C++javaPHPperlPythonRuby

 

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();

            }

        }

    }

猜你喜欢

转载自759163845.iteye.com/blog/2026586