MongoDB+JSONObject 强大的组合

最近,要做个数据抓取和备份。因为抓回来的数据都是json串,而且json串还有很多层,层里面还有数组,要拆成架构化数据并持久化是非常烦的(数据表设计,各个表之间的关联复杂,拆多层的json串,写各种POJO来接收.......)。对于我这种懒人来说,最简单的就是拿到的是什么我就存什么。所以想到了用MongoDB来存抓取回来的数据。

但装个MongoDB已经把我弄得身心疲惫,怎么装我就不说了,度娘教程很多,坑也很多。装好后就是结合Java存抓取回来的数据。

我是用maven来管理依赖的,要加两个依赖:

 <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-mongodb -->
<dependency>
	<groupId>org.springframework.data</groupId>
	<artifactId>spring-data-mongodb</artifactId>
	<version>1.9.6.RELEASE</version>
</dependency>	
<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
<dependency>
	<groupId>org.mongodb</groupId>
	<artifactId>mongo-java-driver</artifactId>
	<version>3.3.0</version>
</dependency>
然后就是连接MongoDB的Java代码:

public static MongoDatabase getMongoDBSession(String hostId, Integer port, String Database){
		
	// 连接到 mongodb 服务
        MongoClient mongoClient = new MongoClient( hostId , port );

        // 连接到数据库
        MongoDatabase mongoDatabase = mongoClient.getDatabase(Database);  
        return mongoDatabase;
}
我把它封装成一个工具类。
下面就是入库操作:

package com.xxxx.crm.Util;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.bson.Document;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.gosuncn.crm.Controller.BaseController;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;

import net.sf.json.JSONObject;

public class MongoDBOps {

	private static final Logger logger = LoggerFactory.getLogger(BaseController.class);
	/**
		 * @param maps Map集合
	 * @param mongoDatabase 数据库名字
	 * @param collectionName 文档集合名字
	 */
	public static void saveHashMap(Map<String, String> maps, MongoDatabase mongoDatabase, String collectionName){
		
		List<Document> documents = new ArrayList<Document>();//Mongo文档数据集
		MongoCollection<org.bson.Document> collection = null;

		// 循环存入Mongo
		for (Map.Entry<String, String> entry : maps.entrySet()) { //由于拿到是数据是Map来的,我只需要值,所以循环取值放到文档List里面。
				Document document = new Document(JSONObject.fromObject(entry.getValue()));//这才是重点
				documents.add(document);
	    	}
		collection = mongoDatabase.getCollection(collectionName);//通过集合名获取集合,没有就自动创建一个
		collection.insertMany(documents);//一次性插入多条数据,该函数无返回值。所以我不知道怎么判断是否插入成功。望大神指教
		logger.info(collection+"@模块名称:"+collectionName+",总备份记录数:"+documents.size());
	}
}

重点:
Document document = new Document(param);

这里的参数是要接json串的,但也可以接收JSONObject,这就方便多了。












评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值