Java语言标准的数据库时MySQL,但是有些时候也会用到MongoDB,这次Boss交代处理MongoDB,所以讲代码以及思路记录下了

摸索的过程,才发现软件的适用还是很重要的啊!!!

我连接的MongoDB的数据是远程数据库,连接本地数据库的方法网上有很多:

  1. //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
  2. //ServerAddress()两个参数分别为 服务器地址 和 端口
  3. ServerAddress serverAddress = new ServerAddress("106.12.34.175",27017);
  4. List<ServerAddress> addrs = new ArrayList<ServerAddress>();
  5. addrs.add(serverAddress);
  6.  
  7. //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
  8. MongoCredential credential = MongoCredential.createScramSha1Credential("***", "***", "***".toCharArray());
  9. List<MongoCredential> credentials = new ArrayList<MongoCredential>();
  10. credentials.add(credential);
  11.  
  12. //通过连接认证获取MongoDB连接
  13. MongoClient mongoClient = new MongoClient(addrs,credentials);
  14.  
  15. //连接到数据库
  16. MongoDatabase mongoDatabase = mongoClient.getDatabase("***");
  17. MongoCollection<Document> collection = mongoDatabase.getCollection("dianping_city");
  18.  
  19. //查询过程
  20. BasicDBObject query = new BasicDBObject();
  21. query.put("city_num","xxx");
  22.  
  23. //查询结果
  24. //MongoCursor<Document> cursor = collection.find(query).skip(0).limit(10).iterator();
  25. MongoCursor<Document> cursor = collection.find(query).skip(0).iterator();

这样查询结果就有了,下面要将查询结果存储为CSV文件,我这里实现的是对查询的结果进行存储(对于多条的查询数据,也一并放入CSV文件中);存储的过程需要注意:从MongoDB返回的数据类型,多条数据类型在CSV文件中的对齐。

  1. List<String> resultList = new LinkedList<>();
  2. List<String> tableList = new ArrayList<>();
  3. while (cursor.hasNext()) {
  4. String jsonString = new String();
  5. jsonString = cursor.next().toJson();
  6. int length = jsonString.length();
  7. jsonString = "[{" + jsonString.substring(jsonString.indexOf(",") + 1, length) + "]";
  8. System.out.println(jsonString);
  9.  
  10. JSONArray jsonArray = new JSONArray(jsonString);
  11. JSONObject jsonObject = jsonArray.getJSONObject(0);
  12. try {
  13. if(tableList.size() == 0) {
  14. StringBuilder stringKey = new StringBuilder();
  15. Iterator iterator = jsonObject.keys();
  16. while (iterator.hasNext()) {
  17. String key = (String) iterator.next();
  18. if(key.compareTo("shophours") == 0){continue;}
  19. tableList.add(key);
  20. stringKey.append(key).append(',');
  21. }
  22. resultList.add(stringKey.deleteCharAt(stringKey.length()-1).toString());
  23. }
  24. StringBuilder stringValue = new StringBuilder();
  25. for(String entry: tableList){
  26. String value = new String();
  27. if(!jsonObject.has(entry)){
  28. value = "null";
  29. }
  30. else {
  31. value = jsonObject.get(entry).toString();
  32. }
  33. stringValue.append(value).append(',');
  34. }
  35. resultList.add(stringValue.deleteCharAt(stringValue.length()-1).toString());
  36. }
  37. catch (JSONException e){
  38. e.printStackTrace();
  39. }
  40. }

总结一下:之前没有处理过MongoDB,所以在这个small task上花了点时间,不过最后也有收获,至少MongoDB与Java相关的坑踩了一部分,为以后积累经验嘛。

整体代码:

  1. package MongoDB;
  2.  
  3. import com.mongodb.*;
  4. import com.mongodb.client.MongoCollection;
  5. import com.mongodb.client.MongoCursor;
  6. import com.mongodb.client.MongoDatabase;
  7. import org.bson.Document;
  8. import org.json.*;
  9. import java.io.*;
  10. import java.util.*;
  11.  
  12. public class outputData {
  13. public static void main(String[] args){
  14. //连接到MongoDB服务 如果是远程连接可以替换“localhost”为服务器所在IP地址
  15. //ServerAddress()两个参数分别为 服务器地址 和 端口
  16. ServerAddress serverAddress = new ServerAddress("IP",port);
  17. List<ServerAddress> addrs = new ArrayList<ServerAddress>();
  18. addrs.add(serverAddress);
  19.  
  20. //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
  21. MongoCredential credential = MongoCredential.createScramSha1Credential("***", "***", "***".toCharArray());
  22. List<MongoCredential> credentials = new ArrayList<MongoCredential>();
  23. credentials.add(credential);
  24.  
  25. //通过连接认证获取MongoDB连接
  26. MongoClient mongoClient = new MongoClient(addrs,credentials);
  27.  
  28. //连接到数据库
  29. MongoDatabase mongoDatabase = mongoClient.getDatabase("****");
  30. MongoCollection<Document> collection = mongoDatabase.getCollection("dianping_city");
  31.  
  32. //查询过程
  33. BasicDBObject query = new BasicDBObject();
  34. query.put("city_num","xxx");
  35.  
  36. //查询结果
  37. //MongoCursor<Document> cursor = collection.find(query).skip(0).limit(10).iterator();
  38. MongoCursor<Document> cursor = collection.find(query).skip(0).iterator();
  39.  
  40. List<String> resultList = new LinkedList<>();
  41. List<String> tableList = new ArrayList<>();
  42. while (cursor.hasNext()) {
  43. String jsonString = new String();
  44. jsonString = cursor.next().toJson();
  45. int length = jsonString.length();
  46. jsonString = "[{" + jsonString.substring(jsonString.indexOf(",") + 1, length) + "]";
  47. System.out.println(jsonString);
  48.  
  49. JSONArray jsonArray = new JSONArray(jsonString);
  50. JSONObject jsonObject = jsonArray.getJSONObject(0);
  51. try {
  52. if(tableList.size() == 0) {
  53. StringBuilder stringKey = new StringBuilder();
  54. Iterator iterator = jsonObject.keys();
  55. while (iterator.hasNext()) {
  56. String key = (String) iterator.next();
  57. if(key.compareTo("shophours") == 0){continue;}
  58. tableList.add(key);
  59. stringKey.append(key).append(',');
  60. }
  61. resultList.add(stringKey.deleteCharAt(stringKey.length()-1).toString());
  62. }
  63. StringBuilder stringValue = new StringBuilder();
  64. for(String entry: tableList){
  65. String value = new String();
  66. if(!jsonObject.has(entry)){
  67. value = "null";
  68. }
  69. else {
  70. value = jsonObject.get(entry).toString();
  71. }
  72. stringValue.append(value).append(',');
  73. }
  74. resultList.add(stringValue.deleteCharAt(stringValue.length()-1).toString());
  75. }
  76. catch (JSONException e){
  77. e.printStackTrace();
  78. }
  79. }
  80. cursor.close();
  81.  
  82. try {
  83. File csv = new File("C:\\Users\\Administrator\\Desktop\\tmp2.csv");
  84. OutputStreamWriter outStream = null;
  85. outStream = new OutputStreamWriter(new FileOutputStream(csv), "GBK");
  86. BufferedWriter bw = new BufferedWriter(outStream);
  87. for(String entry : resultList){
  88. // 添加新的数据行
  89. bw.write(entry.toCharArray());
  90. bw.newLine();
  91. }
  92. bw.close();
  93. }
  94. catch (FileNotFoundException e) {
  95. // File对象的创建过程中的异常捕获
  96. e.printStackTrace();
  97. } catch (IOException e) {
  98. // BufferedWriter在关闭对象捕捉异常
  99. e.printStackTrace();
  100. }
  101. System.out.println("MongoDB connect successfully: "+"mongoDatabase = " + mongoDatabase.getName());
  102. }
  103. }

最后贴上几个为以后做准备的链接:

MongoDB安装:http://www.cnblogs.com/lzrabbit/p/3682510.html

Java下MongoDB查询:https://www.cnblogs.com/luoaz/p/4691639.html

Java对MongoDB中的数据查询处理的更多相关文章

  1. 解决Spring中使用Example无法查询到Mongodb中的数据问题

    1 问题描述 在Spring Boot中使用Mongodb中的Example查询数据时查询不到,示例代码如下: ExampleMatcher matcher = ExampleMatcher.matc ...

  2. MongoDB中的数据聚合工具Aggregate和Group

    周煦辰 2016-01-16 来说说MongoDB中的数据聚合工具. Aggregate是MongoDB提供的众多工具中的比较重要的一个,类似于SQL语句中的GROUP BY.聚合工具可以让开发人员直 ...

  3. 使用highcharts显示mongodb中的数据

    1.mongodb数据表相关 # 显示数据库 show dbs # 数据库 use ceshi # 显示表 show tables # 创建集合 db.createCollection('infoB' ...

  4. java读取请求中body数据

    java读取请求中body数据 /** * 获取request中body数据 * * @author lifq * * 2017年2月24日 下午2:29:06 * @throws IOExcepti ...

  5. MongoDB中导入数据命令的使用(mongoimport)

    MongoDB中导入数据命令的使用(mongoimport) 制作人:全心全意 语法: mongoimport <options> <file> 介绍: 该命令可以将CSV,T ...

  6. 用java在客户端读取mongodb中的数据并发送至服务器

    使用Java自带的socket端口来实现,程序如下: Client.java package com.cn.gao; import java.net.*; import java.io.*; impo ...

  7. Eclipse中java向数据库中添加数据,更新数据,删除数据

    前面详细写过如何连接数据库的具体操作,下面介绍向数据库中添加数据. 注意事项:如果参考下面代码,需要 改包名,数据库名,数据库账号,密码,和数据表(数据表里面的信息) package com.ning ...

  8. 7. java操作MongoDB,采用_id查询

    转自:https://www.2cto.com/database/201704/633262.html mongodb命令行_id查询方法 直接用ObjectId() db.getCollection ...

  9. java连接redis中的数据查、增、改、删操作的方法

    package com.lml.redis; import java.util.HashMap;import java.util.Iterator;import java.util.Map;impor ...

随机推荐

  1. (转)RabbitMQ学习

    (二期)24.消息中间件RabbitMq [课程24]RabbitM...概念.xmind60.2KB [课程24]五种队列模式.xmind0.8MB [课程24]消息确...rm).xmind84. ...

  2. 记录一下 ajax的基础传送

    传数据 var json = $("#form").serializeObject(); $.ajax({ url: "/getUser", type: &qu ...

  3. 运行python脚本后台执行

    最近搞到了一台服务器,挂一个脚本刷刷河畔在线时间.脚本随便写了两下,能跑到什么时候就随缘了 https://blog.csdn.net/philosophyatmath/article/details ...

  4. 原生JS取代一些JQuery方法的简单实现

    原生JS取代一些JQuery方法的简单实现 下面小编就为大家带来一篇原生JS取代一些JQuery方法的简单实现.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧   1.选 ...

  5. Lintcode452-Remove Linked List Elements-Easy

    Remove Linked List Elements Remove all elements from a linked list of integers that have value val. ...

  6. 2017-2018-2 20165306 实验四《Android开发基础》实验报告

    实验四<Android开发基础>实验报告 实验报告封面 实验内容 Android程序设计-1 实验要求: 参考<Java和Android开发学习指南(第二版)(EPUBIT,Java ...

  7. for循环 Dictionary

    Dictionary<string, string> dic = new Dictionary<string, string>(); dic.Add("1" ...

  8. python类的成员

    一.实例变量:简单的来说就是给对象赋值 class Person: def __init__(self, name, card_no, height, weight, address, laopo): ...

  9. JavaSE习题 第八章 线程

    问答题 1.线程和进程是什么关系? 进程是程序的一次动态执行,对应了从代码加载,执行至执行完毕的一个完整的过程 线程是比进程更小的执行单位,一个进程在其执行过程中可以产生多个线程,形成多条执行线索 2 ...

  10. BMP操作_测试

    1.参考网址: http://blog.sina.com.cn/s/blog_678b377a0100mlyb.html http://blog.csdn.net/weiyongtao87/artic ...