mongodb json

对mongodb数据的json的相关操作

package com.nextmap.jdbc.mongodb;

import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.WriteConcern;
import com.mongodb.util.JSON;

/**
 * Mongo数据库通用操作类
 *
 * @date 2015-12-20 下午9:06:30
 * @version Beta
 *
 */
public class MongoDBOperator {
	private Mongo mongo = null;
	private Gson gson = null;
	public MongoDBOperator(Mongo mongo){
		this.mongo = mongo;
	}

	public MongoDBOperator(
			String dbHost,
			String dbPort,
			String username,
			String password) throws Exception, UnknownHostException{
		if(StringUtils.isBlank(username) && StringUtils.isBlank(password))
			this.mongo =
			MongoBase.generateMongo(dbHost, dbPort);
		else
			this.mongo =
				MongoBase.generateMongo(dbHost, dbPort, username, password);
		gson = new Gson();
	}

	public MongoDBOperator(
			String dbHost,
			String dbPort) throws Exception, UnknownHostException{
		this.mongo =
				MongoBase.generateMongo(dbHost, dbPort);
		gson = new Gson();
	}

	/**
	 * 获取数据库中指定数据集的第1条文档. 以Json字符串返回.
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param keyName 关键字字段
	 * @param keyValue 关键字值
	 * @param fieldFilter 字段过滤映射表
	 * @return 第1条文档的Json字符串
	 *
	 */
	public String getDocumentAsJsonStr(
			String dbName,
			String colName,
			String keyName,
			Object keyValue,
			Map<String, Boolean> fieldFilter){
		String jsonStr = null;
		List<String> result = getDocumentsAsJsonStrList(dbName, colName, keyName, keyValue, 0, 1, fieldFilter);
		if((result != null)&&(result.size() > 0)){
			jsonStr = result.get(0);
		}

		return jsonStr;
	}

	/**
	 * 获取符合查询关键字的数据库中指定数据集的文档集合. 结果以Json字符串列表形式返回
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param keyName 关键字字段
	 * @param keyValue 关键字值
	 * @param skip 跳过的文档数
	 * @param limit 返回的文档数上限
	 * @param fieldFilter 字段过滤映射表
	 * @return 字符串列表文档集合
	 *
	 * 字段过滤映射表:</br>
	 * "String-Boolean"键值对</br>
	 * String: 字段名. Boolean: true表示该字段在结果集合中出现; false表示该字段不出现.
	 *
	 * @version 1.0
	 * @author Zhu Haichuan
	 * @update 2015-12-23 下午3:31:30
	 */
	public List<String> getDocumentsAsJsonStrList(
			String dbName,
			String colName,
			String keyName,
			Object keyValue,
			int skip,
			int limit,
			Map<String, Boolean> fieldFilter){
		List<String> result = new ArrayList<>();

		DB db = mongo.getDB(dbName);
		DBCollection dbCollection = db.getCollection(colName);
		BasicDBObject fields = new BasicDBObject();
		if(fieldFilter != null && fieldFilter.size() > 0){
			// 过滤结果字段
			for(Entry<String, Boolean> entry : fieldFilter.entrySet()){
				if(entry.getValue()){
					fields.put(entry.getKey(), 1);
				}else{
					fields.put(entry.getKey(), 0);
				}
			}
		}

		BasicDBObject query = new BasicDBObject(keyName, keyValue);
		DBCursor dbCursor = dbCollection.find(query, fields).skip(skip).limit(limit);

		while(dbCursor.hasNext()){
			DBObject dbObject = dbCursor.next();
			result.add(dbObject.toString());
		}
		dbCursor.close();
		return result;
	}

	/**
	 * 插入或更新Json字符串对象至数据库
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param keyName 关键字名称
	 * @param jsonStr Json字符串
	 * @return 完成操作记录数
	 *
	 * @version 1.0
	 * @author Zhu Haichuan
	 * @update 2015年12月24日 下午9:33:23
	 */
	public int insupJsonStrToCollection(
			String dbName,
			String colName,
			String keyName,
			String jsonStr){
		int result = 0;
		DBObject dbObject = (DBObject) JSON.parse(jsonStr); //解析json字符串为DBObject对象

		DB db = mongo.getDB(dbName);
		DBCollection dbCollection = db.getCollection(colName);
		BasicDBObject query = new BasicDBObject(keyName, dbObject.get(keyName));
		/*DBCursor dbCursor = dbCollection.find(query);
		if(dbCursor.count() > 0){

		}*/
		result = dbCollection.update(query, dbObject, true, false, WriteConcern.SAFE).getN();

		return result;
	}

	/**
	 * 删除数据库中记录
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param keyName 关键字名称
	 * @param keyValue Json字符串
	 * @return 完成操作记录数
	 */
	public int deleteFromCollection(
			String dbName,
			String colName,
			String keyName,
			Object keyValue
			){
		int result = 0;
		DB db = mongo.getDB(dbName);
		DBCollection dbCollection = db.getCollection(colName);
		BasicDBObject query = new BasicDBObject();
		query.put(keyName, keyValue);
		result = dbCollection.remove(query, WriteConcern.SAFE).getN();

		return result;
	}

	/**
	 *
	 * 插入Json字符串列表对象至数据库. 如果对象存在则更新.
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param jsonStrList 字符串列表
	 * @return 成功插入数量
	 *
	 * @version 1.0
	 * @author Zhu Haichuan
	 * @update 2015-12-23 上午9:10:43
	 */
	@Deprecated
	public int insupJsonStrListToCollection(String dbName, String colName, List<String> jsonStrList){
		int result = 0;
		DB db = mongo.getDB(dbName);
		DBCollection dbCollection = db.getCollection(colName);
		for(String jsonString : jsonStrList){
			DBObject dbObject = (DBObject) JSON.parse(jsonString); //解析json字符串为DBObject对象
			result = result +dbCollection.update(dbObject, dbObject,
					true, false, WriteConcern.SAFE).getN(); // 对象存在则更新, 否则插入
		}
		return result;
	}

	/**
	 * 插入Json字符串列表对象至数据库. 如果对象存在则更新.
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param keyName 关键字名称
	 * @param jsonStrList 字符串列表
	 * @return 成功插入数量
	 *
	 * @version 1.0
	 * @author Zhu Haichuan
	 * @update 2015年12月13日 上午9:58:18
	 */
	public int insupJsonStrListToCollection(String dbName, String colName, String keyName, List<String> jsonStrList){
		int result = 0;

		for(String jsonString : jsonStrList){
			result = result + insupJsonStrToCollection(dbName, colName, keyName, jsonString);
		}
		return result;
	}

	/**
	 * 插入列表对象至数据库.
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param jsonStrList 数据对象列表
	 * @return 成功插入数量
	 *
	 */
	public int insJsonStrListToCollection(String dbName, String colName, List<String> jsonStrList){
		int result = 0;
		DB db = mongo.getDB(dbName);
		DBCollection dbCollection = db.getCollection(colName);
		List<DBObject> dbObjects = new ArrayList<>();
		for(String jsonString : jsonStrList){
			DBObject dbObject = (DBObject) JSON.parse(jsonString); //解析json字符串为DBObject对象
			dbObjects.add(dbObject);
		}
		result = dbCollection.insert(dbObjects, WriteConcern.SAFE).getN();
		return result;
	}

	/**
	 * 获取数据库中指定数据集的文档数量
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @return 文档数量
	 *
	 */
	public long getDocumnetSize(String dbName, String colName){
		DB db = mongo.getDB(dbName);
		DBCollection dbCollection = db.getCollection(colName);
		return dbCollection.count();
	}

	/**
	 * 获取数据库中指定数据集的文档. 以JSONObject列表返回
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param skip 跳过的文档数
	 * @param limit 返回的文档数上限.
	 * @param fieldFilter 字段过滤映射表
	 * @return JSONObject列表文档集合
	 *
	 * 字段过滤映射表:</br>
	 * "String-Boolean"键值对</br>
	 * String: 字段名. Boolean: true表示该字段在结果集合中出现; false表示该字段不出现.
	 *
	 * @version 1.0
	 * @author Zhu Haichuan
	 * @update 2015-12-26 下午3:31:30
	 */
	public List<JSONObject> getDocumentsAsJSONObject(
			String dbName,
			String colName,
			int skip,
			int limit,
			Map<String, Boolean> fieldFilter){
		List<JSONObject> result = new ArrayList<>();

		DB db = mongo.getDB(dbName);
		DBCollection dbCollection = db.getCollection(colName);
		BasicDBObject fields = new BasicDBObject();
		if(fieldFilter != null && fieldFilter.size() > 0){
			// 过滤结果字段
			for(Entry<String, Boolean> entry : fieldFilter.entrySet()){
				if(entry.getValue()){
					fields.put(entry.getKey(), 1);
				}else{
					fields.put(entry.getKey(), 0);
				}
			}
		}
		DBCursor dbCursor = dbCollection.find(null, fields).skip(skip).limit(limit);

		while(dbCursor.hasNext()){
			DBObject dbObject = dbCursor.next();
			try {
				JSONObject oneJson = JSONObject.parseObject(dbObject.toString());
				result.add(oneJson);
			} catch (JSONException e) {
				e.printStackTrace();
			}

		}
		dbCursor.close();
		return result;
	}

	/**
	 * 获取符合查询关键字的数据库中指定数据集的文档集合. 结果以Json字符串列表形式返回
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param keyName 关键字字段
	 * @param keyValue 关键字值
	 * @param skip 跳过的文档数
	 * @param limit 返回的文档数上限
	 * @param fieldFilter 字段过滤映射表
	 * @return JSONObject 列表文档集合
	 *
	 * 字段过滤映射表:</br>
	 * "String-Boolean"键值对</br>
	 * String: 字段名. Boolean: true表示该字段在结果集合中出现; false表示该字段不出现.
	 *
	 * @version 1.0
	 * @author Zhu Haichuan
	 * @update 2015-12-26 下午2:16:27
	 */
	public List<JSONObject> getDocumentsAsJSONObject(
			String dbName,
			String colName,
			String keyName,
			Object keyValue,
			int skip,
			int limit,
			Map<String, Boolean> fieldFilter){
		List<JSONObject> result = new ArrayList<>();

		DB db = mongo.getDB(dbName);
		DBCollection dbCollection = db.getCollection(colName);
		BasicDBObject fields = new BasicDBObject();
		if(fieldFilter != null && fieldFilter.size() > 0){
			// 过滤结果字段
			for(Entry<String, Boolean> entry : fieldFilter.entrySet()){
				if(entry.getValue()){
					fields.put(entry.getKey(), 1);
				}else{
					fields.put(entry.getKey(), 0);
				}
			}
		}

		BasicDBObject query = new BasicDBObject(keyName, keyValue);
		DBCursor dbCursor = dbCollection.find(query, fields).skip(skip).limit(limit);

		while(dbCursor.hasNext()){
			DBObject dbObject = dbCursor.next();
			try {
				JSONObject oneJson = JSONObject.parseObject(dbObject.toString());
				result.add(oneJson);
			} catch (JSONException e) {
				e.printStackTrace();
			}

		}
		dbCursor.close();
		return result;
	}

	/**
	 * 获取符合模糊查询关键字的数据库中指定数据集的文档集合. 结果以Json字符串列表形式返回
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param keyName 关键字字段
	 * @param keyValue 关键字值
	 * @param skip 跳过的文档数
	 * @param limit 返回的文档数上限
	 * @param fieldFilter 字段过滤映射表
	 * @return JSONObject列表文档集合
	 *
	 * 字段过滤映射表:</br>
	 * "String-Boolean"键值对</br>
	 * String: 字段名. Boolean: true表示该字段在结果集合中出现; false表示该字段不出现.
	 *
	 */
	public List<JSONObject> getDocumentsAsJSONObjectByRegex(
			String dbName,
			String colName,
			String keyName,
			String keyValue,
			int skip,
			int limit,
			Map<String, Boolean> fieldFilter){
		List<JSONObject> result = new ArrayList<>();

		DB db = mongo.getDB(dbName);
		DBCollection dbCollection = db.getCollection(colName);
		BasicDBObject fields = new BasicDBObject();
		if(fieldFilter != null && fieldFilter.size() > 0){
			// 过滤结果字段
			for(Entry<String, Boolean> entry : fieldFilter.entrySet()){
				if(entry.getValue()){
					fields.put(entry.getKey(), 1);
				}else{
					fields.put(entry.getKey(), 0);
				}
			}
		}

		BasicDBObject query = new BasicDBObject(keyName, generateLikeStr(keyValue));
		DBCursor dbCursor = dbCollection.find(query, fields).skip(skip).limit(limit);

		while(dbCursor.hasNext()){
			DBObject dbObject = dbCursor.next();
			try {
				JSONObject oneJson = JSONObject.parseObject(dbObject.toString());
				result.add(oneJson);
			} catch (JSONException e) {
				e.printStackTrace();
			}

		}
		dbCursor.close();
		return result;
	}

	/**
	 * 用一句话说明这个方法做什么
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param keyName 关键字字段
	 * @param keyValue 关键字值
	 * @param andQuery 'and'查询条件列表
	 * @param fieldFilter 字段过滤映射表
	 * @return JSONObject列表文档集合
	 *
	 * 字段过滤映射表:</br>
	 * "String-Boolean"键值对</br>
	 * String: 字段名. Boolean: true表示该字段在结果集合中出现; false表示该字段不出现.
	 *
	 * @version 1.0
	 * @author Zhu Haichuan
	 * @update 2015-12-25 上午9:54:59
	 */
	public List<JSONObject> getDocumentsAsJSONObject(
			String dbName,
			String colName,
			int skip,
			int limit,
			Map<String, Object> andQuery,
			Map<String, Boolean> fieldFilter){
		List<JSONObject> result = new ArrayList<>();

		DB db = mongo.getDB(dbName);
		DBCollection dbCollection = db.getCollection(colName);

		BasicDBObject fields = null;
		if(fieldFilter != null && fieldFilter.size() > 0){
			fields = new BasicDBObject();
			// 过滤结果字段
			for(Entry<String, Boolean> entry : fieldFilter.entrySet()){
				if(entry.getValue()){
					fields.put(entry.getKey(), 1);
				}else{
					fields.put(entry.getKey(), 0);
				}
			}
		}

		BasicDBObject query = null;
		if(andQuery !=null && andQuery.size() > 0){
			query = new BasicDBObject();
			// 添加and查询条件
			for(Entry<String, Object> entry : andQuery.entrySet()){
				query.put(entry.getKey(), entry.getValue());
			}
		}

		DBCursor dbCursor = dbCollection.find(query, fields).skip(skip).limit(limit);
		while(dbCursor.hasNext()){
			DBObject dbObject = dbCursor.next();
			try {
				JSONObject oneJson = JSONObject.parseObject(dbObject.toString());
				result.add(oneJson);
			} catch (JSONException e) {
				e.printStackTrace();
			}

		}
		dbCursor.close();

		return result;
	}

	/**
	 * 获取数据库中指定数据集的文档.
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param fieldFilter 字段过滤映射表
	 * @return 文档集合
	 *
	 * 字段过滤映射表:</br>
	 * "String-Boolean"键值对</br>
	 * String: 字段名. Boolean: true表示该字段在结果集合中出现; false表示该字段不出现.
	 *
	 * @version 1.0
	 * @author Zhu Haichuan
	 * @update 2015-12-23 下午3:16:02
	 */
	public List<JSONObject> getDocumentsAsJSONObject(
			String dbName,
			String colName,
			Map<String, Boolean> fieldFilter){
		return getDocumentsAsJSONObject(dbName, colName, 0, 0, fieldFilter);
	}

	/**
	 * 插入Map<String,String>对象至数据库
	 *
	 * @param dbName 数据库名称
	 * @param colName 数据集名称
	 * @param keyName 对象关键字段名称
	 * @param attrMap 属性列表
	 * @return 插入数量
	 *
	 */
	public int insMapToCollection(String dbName, String colName,
			String keyName, Map<String, String> attrMap){
		int result = 0;

		String value = attrMap.get(keyName);
		if(StringUtils.isBlank(value))
			return result;

		DB db = mongo.getDB(dbName);
		DBCollection dbCollection = db.getCollection(colName);
		BasicDBObject query = new BasicDBObject(keyName, value);
		DBCursor dbCursor = dbCollection.find(query);
		if(dbCursor.count()>0)
			return result;
		DBObject dbObject = (DBObject) JSON.parse(gson.toJson(attrMap)); //解析json字符串为DBObject对象
		result = dbCollection.insert(dbObject, WriteConcern.SAFE).getN();
		/*DBObject dbObject = (DBObject) JSON.parse(jsonStr); //解析json字符串为DBObject对象
		result = dbCollection.update(dbObject, dbObject,
				true, false, WriteConcern.SAFE).getN(); // 如果对象存在则更新
*/		return result;
	}

	//模糊查询
	 private BasicDBObject generateLikeStr(String findStr) {
	     Pattern pattern = Pattern.compile(findStr);
	     return new BasicDBObject("$regex", pattern);
	 }

	public void closeDB(){
		if(mongo != null) {
			mongo.close();
			mongo = null;
		}

	}
}
时间: 2024-11-05 13:38:48

mongodb json的相关文章

MongoDB - Introduction to MongoDB, MongoDB Extended JSON

JSON can only represent a subset of the types supported by BSON. To preserve type information, MongoDB adds the following extensions to the JSON format: Strict mode. Strict mode representations of BSON types conform to the JSON RFC. Any JSON parser c

spring MVC 整合mongodb

Spring Mongodb 目录 1 SPRING整合MONGODB 1 1.1 环境准备 1 1.2 包依赖 1 1.3 配置 2 2 案列 5 2.1 SPRING MVC整合MONGODB代码案例 5 1 Spring整合Mongodb 1.1 环境准备 1. mongodb官网 http://www.mongodb.org/,下载mongodb安装包和mongodb的java驱动包. mongodb安装包(下载地址http://www.mongodb.org/downloads).Mo

MongoDB (二) MongoDB 优点

任何关系型数据库,具有典型的架构设计,显示表和这些表之间的关系.虽然在 MongoDB中,没有什么关系的概念. MongoDB比RDBMS的优势 架构:MongoDB是文档型数据库,其中一个集合保存不同的不同的文件.字段的数量,内容和该文件的大小可以是不同于从一个文件复制到另一个. 一个单一的对象是结构清晰 没有复杂的连接 深查询能力. MongoDB支持动态查询使用基于文档的查询语言,如SQL几乎一样强大的文件 调优 易于规模化:MongoDB是易于扩展 不需要数据库对象的应用程序对象转换/映

spring java mongodb geo 位置搜索服务 示例

1.配置 pom.xml,在原有的spring项目中添加以下2个即可. <span style="white-space:pre"> </span><!-- mongo db 驱动--> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3

Mongodb大数据语法大全

JSON和MONGODB JSON不止是一种交换数据的方式,也是一种存储数据的良好方式,实际上MONGODB并未使用JSON存储数据,而是使用由MONGODB团队开发的一种称为BSON的开放数据格式. 面向文档存储BSON BSON是一个开放标准,BSON存储使用的空间比JSNO(CouchDB一个强大的面向文档数据库)多在相同版本情况下. 1.处理数据比JSON快,消耗一定的存储空间,简单说BSON更方便浏览,遍历索引页非常快. 2.使用BSON容易将它数据快速转换为编程余元的原生数据格式 3

8月26号 对前段时间只是的总结归纳

2016-08-26 包含知识归纳总结 1. 写在开始之前 开始我们今天的复习总结 ,学习需要总结和复习 ,才能不忘,这句古话,应该谨记. 2. 几个学习复习点 1.1关于 UI部分 A   是否设置视口 B   百分比布局 (弹性盒子) C   是否为响应式 D  确定终端设备 E  理解为一个盒子基础想进行切图  有大到小 Div{ Width: Height:    background: Float: Position: left: Background-image:url()  no-

SEVER&amp;&amp;HTTP

* 服务器概念 * 服务器(SERVER)其实就是一台PC机(硬件) * 服务器的分类 * 硬件服务器 - PC机 * 电脑硬件 - PC机/小型机/刀片机/中型机/大型机/超级计算机 * 小型机 - IBM(AIX)/HP/联想(Linux) * 软件服务器 - 中间件 * 为了运行Web应用的一种软件 * 软件架构 * B/S - 浏览器(browser)/服务器端(server) * 互联网-企业级 * 互联网 - 网易.腾讯.百度等 * 企业级 - 银行系统.医院系统等 * 好处 * 软

【大话存储II】学习笔记(15章),NoSQL

互联网运营商(NSP)的数据中心是数据最集中的地方,也正是因为海量的数据存储与访问,传统的存储架构已经无法满足了现有的需求. 比如每秒几十万次的随机IOPS.每秒10GB的流量,一般都需要使用高端存储,当然价格将不便宜.而且扩展性不好,扩容成本高. 业务的不断增加,导致互联网运营商逐步使用分布式系统来构建底层文件系统及数据库,比如Google的GFS+Bigtable 我们先来看一下为了应对大并发.大流量下,架构的逐步的变化,最后引入NoSQL. 传统数据库架构的演进 使用缓存技术 随着访问量的

redis数据库-VUE创建项目

redis数据库 ''' 关系型数据库: mysql, oracle 非关系型数据库(nosql): redis,mongodb (没有表的概念) key-value mongodb: json 数据--存储在硬盘上 redis: 存在内存中 --- 速度最快 用途: --做缓存 --session数据 --游戏排行榜 --对速度要求高的数据的存储 -- 消息队列 ''' redis VS Memcached -- redis 支持五大数据类型 : 字符串| 列表| 字典 | 集合| 有序集合