Java对MongoDB中的数据查询处理
Java语言标准的数据库时MySQL,但是有些时候也会用到MongoDB,这次Boss交代处理MongoDB,所以讲代码以及思路记录下了
摸索的过程,才发现软件的适用还是很重要的啊!!!
我连接的MongoDB的数据是远程数据库,连接本地数据库的方法网上有很多:
- //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
- //ServerAddress()两个参数分别为 服务器地址 和 端口
- ServerAddress serverAddress = new ServerAddress("106.12.34.175",27017);
- List<ServerAddress> addrs = new ArrayList<ServerAddress>();
- addrs.add(serverAddress);
- //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
- MongoCredential credential = MongoCredential.createScramSha1Credential("***", "***", "***".toCharArray());
- List<MongoCredential> credentials = new ArrayList<MongoCredential>();
- credentials.add(credential);
- //通过连接认证获取MongoDB连接
- MongoClient mongoClient = new MongoClient(addrs,credentials);
- //连接到数据库
- MongoDatabase mongoDatabase = mongoClient.getDatabase("***");
- MongoCollection<Document> collection = mongoDatabase.getCollection("dianping_city");
- //查询过程
- BasicDBObject query = new BasicDBObject();
- query.put("city_num","xxx");
- //查询结果
- //MongoCursor<Document> cursor = collection.find(query).skip(0).limit(10).iterator();
- MongoCursor<Document> cursor = collection.find(query).skip(0).iterator();
这样查询结果就有了,下面要将查询结果存储为CSV文件,我这里实现的是对查询的结果进行存储(对于多条的查询数据,也一并放入CSV文件中);存储的过程需要注意:从MongoDB返回的数据类型,多条数据类型在CSV文件中的对齐。
- List<String> resultList = new LinkedList<>();
- List<String> tableList = new ArrayList<>();
- while (cursor.hasNext()) {
- String jsonString = new String();
- jsonString = cursor.next().toJson();
- int length = jsonString.length();
- jsonString = "[{" + jsonString.substring(jsonString.indexOf(",") + 1, length) + "]";
- System.out.println(jsonString);
- JSONArray jsonArray = new JSONArray(jsonString);
- JSONObject jsonObject = jsonArray.getJSONObject(0);
- try {
- if(tableList.size() == 0) {
- StringBuilder stringKey = new StringBuilder();
- Iterator iterator = jsonObject.keys();
- while (iterator.hasNext()) {
- String key = (String) iterator.next();
- if(key.compareTo("shophours") == 0){continue;}
- tableList.add(key);
- stringKey.append(key).append(',');
- }
- resultList.add(stringKey.deleteCharAt(stringKey.length()-1).toString());
- }
- StringBuilder stringValue = new StringBuilder();
- for(String entry: tableList){
- String value = new String();
- if(!jsonObject.has(entry)){
- value = "null";
- }
- else {
- value = jsonObject.get(entry).toString();
- }
- stringValue.append(value).append(',');
- }
- resultList.add(stringValue.deleteCharAt(stringValue.length()-1).toString());
- }
- catch (JSONException e){
- e.printStackTrace();
- }
- }
总结一下:之前没有处理过MongoDB,所以在这个small task上花了点时间,不过最后也有收获,至少MongoDB与Java相关的坑踩了一部分,为以后积累经验嘛。
整体代码:
- package MongoDB;
- import com.mongodb.*;
- import com.mongodb.client.MongoCollection;
- import com.mongodb.client.MongoCursor;
- import com.mongodb.client.MongoDatabase;
- import org.bson.Document;
- import org.json.*;
- import java.io.*;
- import java.util.*;
- public class outputData {
- public static void main(String[] args){
- //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
- //ServerAddress()两个参数分别为 服务器地址 和 端口
- ServerAddress serverAddress = new ServerAddress("IP",port);
- List<ServerAddress> addrs = new ArrayList<ServerAddress>();
- addrs.add(serverAddress);
- //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
- MongoCredential credential = MongoCredential.createScramSha1Credential("***", "***", "***".toCharArray());
- List<MongoCredential> credentials = new ArrayList<MongoCredential>();
- credentials.add(credential);
- //通过连接认证获取MongoDB连接
- MongoClient mongoClient = new MongoClient(addrs,credentials);
- //连接到数据库
- MongoDatabase mongoDatabase = mongoClient.getDatabase("****");
- MongoCollection<Document> collection = mongoDatabase.getCollection("dianping_city");
- //查询过程
- BasicDBObject query = new BasicDBObject();
- query.put("city_num","xxx");
- //查询结果
- //MongoCursor<Document> cursor = collection.find(query).skip(0).limit(10).iterator();
- MongoCursor<Document> cursor = collection.find(query).skip(0).iterator();
- List<String> resultList = new LinkedList<>();
- List<String> tableList = new ArrayList<>();
- while (cursor.hasNext()) {
- String jsonString = new String();
- jsonString = cursor.next().toJson();
- int length = jsonString.length();
- jsonString = "[{" + jsonString.substring(jsonString.indexOf(",") + 1, length) + "]";
- System.out.println(jsonString);
- JSONArray jsonArray = new JSONArray(jsonString);
- JSONObject jsonObject = jsonArray.getJSONObject(0);
- try {
- if(tableList.size() == 0) {
- StringBuilder stringKey = new StringBuilder();
- Iterator iterator = jsonObject.keys();
- while (iterator.hasNext()) {
- String key = (String) iterator.next();
- if(key.compareTo("shophours") == 0){continue;}
- tableList.add(key);
- stringKey.append(key).append(',');
- }
- resultList.add(stringKey.deleteCharAt(stringKey.length()-1).toString());
- }
- StringBuilder stringValue = new StringBuilder();
- for(String entry: tableList){
- String value = new String();
- if(!jsonObject.has(entry)){
- value = "null";
- }
- else {
- value = jsonObject.get(entry).toString();
- }
- stringValue.append(value).append(',');
- }
- resultList.add(stringValue.deleteCharAt(stringValue.length()-1).toString());
- }
- catch (JSONException e){
- e.printStackTrace();
- }
- }
- cursor.close();
- try {
- File csv = new File("C:\\Users\\Administrator\\Desktop\\tmp2.csv");
- OutputStreamWriter outStream = null;
- outStream = new OutputStreamWriter(new FileOutputStream(csv), "GBK");
- BufferedWriter bw = new BufferedWriter(outStream);
- for(String entry : resultList){
- // 添加新的数据行
- bw.write(entry.toCharArray());
- bw.newLine();
- }
- bw.close();
- }
- catch (FileNotFoundException e) {
- // File对象的创建过程中的异常捕获
- e.printStackTrace();
- } catch (IOException e) {
- // BufferedWriter在关闭对象捕捉异常
- e.printStackTrace();
- }
- System.out.println("MongoDB connect successfully: "+"mongoDatabase = " + mongoDatabase.getName());
- }
- }
最后贴上几个为以后做准备的链接:
MongoDB安装:http://www.cnblogs.com/lzrabbit/p/3682510.html
Java下MongoDB查询:https://www.cnblogs.com/luoaz/p/4691639.html
Java对MongoDB中的数据查询处理的更多相关文章
- 解决Spring中使用Example无法查询到Mongodb中的数据问题
1 问题描述 在Spring Boot中使用Mongodb中的Example查询数据时查询不到,示例代码如下: ExampleMatcher matcher = ExampleMatcher.matc ...
- MongoDB中的数据聚合工具Aggregate和Group
周煦辰 2016-01-16 来说说MongoDB中的数据聚合工具. Aggregate是MongoDB提供的众多工具中的比较重要的一个,类似于SQL语句中的GROUP BY.聚合工具可以让开发人员直 ...
- 使用highcharts显示mongodb中的数据
1.mongodb数据表相关 # 显示数据库 show dbs # 数据库 use ceshi # 显示表 show tables # 创建集合 db.createCollection('infoB' ...
- java读取请求中body数据
java读取请求中body数据 /** * 获取request中body数据 * * @author lifq * * 2017年2月24日 下午2:29:06 * @throws IOExcepti ...
- MongoDB中导入数据命令的使用(mongoimport)
MongoDB中导入数据命令的使用(mongoimport) 制作人:全心全意 语法: mongoimport <options> <file> 介绍: 该命令可以将CSV,T ...
- 用java在客户端读取mongodb中的数据并发送至服务器
使用Java自带的socket端口来实现,程序如下: Client.java package com.cn.gao; import java.net.*; import java.io.*; impo ...
- Eclipse中java向数据库中添加数据,更新数据,删除数据
前面详细写过如何连接数据库的具体操作,下面介绍向数据库中添加数据. 注意事项:如果参考下面代码,需要 改包名,数据库名,数据库账号,密码,和数据表(数据表里面的信息) package com.ning ...
- 7. java操作MongoDB,采用_id查询
转自:https://www.2cto.com/database/201704/633262.html mongodb命令行_id查询方法 直接用ObjectId() db.getCollection ...
- java连接redis中的数据查、增、改、删操作的方法
package com.lml.redis; import java.util.HashMap;import java.util.Iterator;import java.util.Map;impor ...
随机推荐
- (转)RabbitMQ学习
(二期)24.消息中间件RabbitMq [课程24]RabbitM...概念.xmind60.2KB [课程24]五种队列模式.xmind0.8MB [课程24]消息确...rm).xmind84. ...
- 记录一下 ajax的基础传送
传数据 var json = $("#form").serializeObject(); $.ajax({ url: "/getUser", type: &qu ...
- 运行python脚本后台执行
最近搞到了一台服务器,挂一个脚本刷刷河畔在线时间.脚本随便写了两下,能跑到什么时候就随缘了 https://blog.csdn.net/philosophyatmath/article/details ...
- 原生JS取代一些JQuery方法的简单实现
原生JS取代一些JQuery方法的简单实现 下面小编就为大家带来一篇原生JS取代一些JQuery方法的简单实现.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1.选 ...
- Lintcode452-Remove Linked List Elements-Easy
Remove Linked List Elements Remove all elements from a linked list of integers that have value val. ...
- 2017-2018-2 20165306 实验四《Android开发基础》实验报告
实验四<Android开发基础>实验报告 实验报告封面 实验内容 Android程序设计-1 实验要求: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java ...
- for循环 Dictionary
Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("1" ...
- python类的成员
一.实例变量:简单的来说就是给对象赋值 class Person: def __init__(self, name, card_no, height, weight, address, laopo): ...
- JavaSE习题 第八章 线程
问答题 1.线程和进程是什么关系? 进程是程序的一次动态执行,对应了从代码加载,执行至执行完毕的一个完整的过程 线程是比进程更小的执行单位,一个进程在其执行过程中可以产生多个线程,形成多条执行线索 2 ...
- BMP操作_测试
1.参考网址: http://blog.sina.com.cn/s/blog_678b377a0100mlyb.html http://blog.csdn.net/weiyongtao87/artic ...