MongoDB
使用Nosql Manager for MongoDB 管理工具
1.管理工具 模糊查询
模糊查询条件包含在 ‘/’之间
2.java 连接MongoDB,条件查询
2.1 连接MongoDB服务,并创建连接数据库对象。
// 连接到 mongodb 服务 MongoClient mongoClient = new MongoClient( "127.0.0.1" , 27017 ); // 连接到数据库 MongoDatabase mongoDatabase = mongoClient.getDatabase("articledb"); System.out.println("Connect to database successfully"); MongoCollection<Document> collection = mongoDatabase.getCollection("article"); MongoCollection<Document> collection_txt = mongoDatabase.getCollection("article_txt");
2.2 添加查询条件
//模糊查询条件 Pattern pattern = Pattern.compile(".*atimo.cn.*", Pattern.CASE_INSENSITIVE); query.put("url", pattern);//对应表字段名 MongoCursor<Document> cursor = collection.find(query).skip(0).limit(20).iterator();//添加查询条件分页条件
2.3 遍历查询结果
while (cursor.hasNext()) { Article act = new Article(); //查询出的结果转换成jsonObject,然后进行封装或者直接返回给前端处理。我这是封装成对象了 JSONObject jsonObject = JSONObject.parseObject( cursor.next().toJson().toString()); System.out.println(jsonObject.getString("url")); act.setTitle(jsonObject.getString("title"));// act.setUrl(jsonObject.getString("url"));// unm++; System.out.println(unm+"--->"+act); //存入redis jedis.lpush("sohu",JSON.toJSONString(act)); }
从Redis取出,遍历
1 String sohu = jedis.rpop("sohu"); 2 JSONObject o = (JSONObject) JSONObject.parse(sohu); 3 Article article = JSONObject.toJavaObject(o, Article.class); 4 System.out.println(article.toString());
从队列单个取出,转换为实体
2.3 游标超时 解决办法 https://blog.csdn.net/u013066244/article/details/82658912
3.使用管理工具写查询语句(统计数量)
数据示例
/* 1 */ { "_id" : ObjectId("5badab52ad56c95900632572"), "artId" : "5ba36b831f535ce7e4814859", "content" : "一看那些细节就知道是245旗舰版", "comTime" : ISODate("2018-06-09T11:32:38Z"), "_class" : "com.xxx.entity.Comment" } /* 2 */ { "_id" : ObjectId("5badab52ad56c95900632573"), "artId" : "5ba36b831f535ce7e4814859", "content" : "他这个是旗舰版的吧(只有旗舰版的座椅才是这个样子的)。旗舰版的动力是180KW,不是小编你说的150KW", "comTime" : ISODate("2018-06-04T01:16:28Z"), "_class" : "com.xxx.entity.Comment" } /* 3 */ { "_id" : ObjectId("5badab52ad56c95900632574"), "artId" : "5ba36b831f535ce7e4814859", "content" : "银行职员往外跑吗?这么自由?", "comTime" : ISODate("2018-05-29T07:12:09Z"), "_class" : "com.xxx.entity.Comment" }
统计所有artId出现的次数,这里的 artId 字段是另外一个表的主键 id
db.comment.aggregate([{$group : {_id : "$artId", count : {$sum : 1}}}])
查询artId出现的次数统计,comment为数据库名,使用aggregate函数
统计结果为
{ "_id" : "5bc91e3ead56c90b4680814b", "count" : 900 } { "_id" : "5bb37536ad56c91a9feac8b4", "count" : 1173 } { "_id" : "5bb36aaaad56c91a9feac8b1", "count" : 1089 } { "_id" : "5bb36aaaad56c91a9feac8b0", "count" : 1026 } { "_id" : "5bb3304ead56c91a9feac896", "count" : 589 } { "_id" : "5bb314e2ad56c91a9feac87e", "count" : 535 } { "_id" : "5bb3115ead56c91a9feac87c", "count" : 670 } { "_id" : "5bb3115ead56c91a9feac87b", "count" : 582 } { "_id" : "5bb30ddaad56c91a9feac87a", "count" : 544 } { "_id" : "5bb30ddaad56c91a9feac877", "count" : 587 } { "_id" : "5bb30ddaad56c91a9feac876", "count" : 719 } { "_id" : "5bb306d2ad56c91a9feac871", "count" : 586 }
统计出每个Id在表中出现的次数。
3.1 扩展 ,查询统计数量在500以上的数据
db.comment.aggregate([{$group : {_id : "$artId", count : {$sum : 1}}},{$match:{count:{$gt:500}}}])
加匹配条件即可。
查询统计数量在200~500之间的
db.comment.aggregate([{$group : {_id : "$artId", count : {$sum : 1}}},{$match:{count:{$gt:300}}},{$match:{count:{$gt:200}}}])
注:artId为统计字段名
提莫队长